为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复“对于 UInt32 来说值太大或太小”C#

如何修复“对于 UInt32 来说值太大或太小”C#

C#
慕沐林林 2023-08-27 10:40:00
我正在尝试将 ActionScript3 代码转换为 C#,这就像主要的事情。然而,在尝试转换其中一个函数时,当我尝试将十六进制字符串转换为 int 时,我收到了标题中的错误。基本上,这段代码应该获取用户数据等信息,然后执行某些操作,最后返回 Base64 编码的文本。我知道的主要错误是在“loc9 = Convert.ToInt32(loc8, 16);”的部分。这就是我收到标题中所说的错误的地方。我曾尝试研究其他人遇到的类似问题,但它看起来并不相同,并且并没有真正帮助我解决问题。(顺便说一句,如果这听起来不太清楚,我很抱歉,如果不明白,请纠正我或提出更多问题)调用时出错的截图ActionScript3 代码:private static function p(param1:String) : String      {         var _loc6_:String = null;         var _loc7_:String = null;         var _loc8_:String = null;         var _loc9_:int = 0;         var _loc2_:String = MD5.hash(param1);         var _loc3_:ByteArray = new ByteArray();         var _loc4_:int = 0;         while(_loc4_ < _loc2_.length * 2)         {            _loc6_ = _loc2_.slice(_loc4_,_loc4_ + 1);            _loc7_ = _loc2_.slice(_loc4_ + 1,_loc4_ + 2);            _loc8_ = "0x" + _loc6_ + _loc7_;            _loc9_ = int(_loc8_);            _loc3_.writeByte(_loc9_);            _loc4_ = _loc4_ + 2;         }         _loc3_.position = 0;         var _loc5_:Base64Encoder = new Base64Encoder();         _loc5_.encodeBytes(_loc3_,0,16);         return _loc5_.toString();      }      public function calculateFromNewActorCreationData(param1:NewActorCreationData, param2:ByteArray, param3:ByteArray) : String      {         return this.calculateFromStrings(param1.ChosenActorName,param1.ChosenPassword,param2,param3);      }      public function calculateFromStrings(param1:String, param2:String, param3:Object, param4:Object) : String      {         var _loc5_:String = param1 + param2 + this.fromByteArray(param3) + this.fromByteArray(param4) + this.p();         return p(_loc5_);      }我最终期望的是能够调用函数,将返回的 Base64 编码数据显示在 MessageBox 中(使用 messagebox 作为测试),而不是弹出任何错误。PS - 除了我在这段代码中遇到的主要问题之外,我还觉得我转换的其他函数并不完美或者可能不一样。因此,如果我的主要问题能够得到解决,如果有人也可以仔细检查我的代码的其他功能,确保它们是准确的,那就太棒了,并提前致谢。
查看完整描述

1 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

总体来看,AS3 代码似乎正在尝试MD5.hash以最糟糕的方式将结果转换为 Base64 编码的字符串(我相信这可以在一行中完成。)


因此,与其复制所有代码将哈希转换为十六进制字符串,结果却很糟糕地将其转换回二进制数组,而只需直接使用已经是二进制数组的 C# 结果:


public static string p(string param1) {

    byte[] loc3 = System.Security.Cryptography.MD5.Create().ComputeHash(System.Text.Encoding.ASCII.GetBytes(param1));

    return Convert.ToBase64String(loc3, 0, 16);

}


查看完整回答
反对 回复 2023-08-27
  • 1 回答
  • 0 关注
  • 233 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信