VB.NET十六进制转字节数组代码转C#后格式错误的解决方法
问题分析与解决方案
错误原因
VB.NET里&H是十六进制字面量前缀,VB能自动把"&HXX"格式的字符串隐式转为Byte类型;但C#不识别&H前缀,且Convert.ToByte默认按十进制解析字符串,导致解析这类带&H的字符串时出现格式错误。另外你这段代码做了冗余操作——把十进制数值先转十六进制字符串再转回Byte,完全没必要。
解决方案
方案1:修正字符串解析逻辑
去掉&H前缀,直接指定用十六进制基数解析Conversion.Hex()返回的字符串:
byte[] bytes = new[] { Convert.ToByte(Conversion.Hex(127), 16), Convert.ToByte(Conversion.Hex(7), 16), Convert.ToByte(Conversion.Hex(170), 16), Convert.ToByte(Conversion.Hex(218), 16), Convert.ToByte(Conversion.Hex(228), 16), Convert.ToByte(Conversion.Hex(50), 16), Convert.ToByte(Conversion.Hex(1), 16), Convert.ToByte(Conversion.Hex(155), 16), Convert.ToByte(Conversion.Hex(171), 16), Convert.ToByte(Conversion.Hex(232), 16), Convert.ToByte(Conversion.Hex(127), 16) };
方案2:直接转换原始数值(推荐)
所有原始数值都在Byte的取值范围(0-255)内,直接强制转换为Byte即可,省去多余的十六进制转换步骤:
byte[] bytes = new[] { (byte)127, (byte)7, (byte)170, (byte)218, (byte)228, (byte)50, (byte)1, (byte)155, (byte)171, (byte)232, (byte)127 };
方案3:用C#十六进制字面量写法
如果偏好直接写十六进制值,C#的十六进制前缀是0x,可读性更高:
byte[] bytes = new[] { 0x7F, 0x07, 0xAA, 0xDA, 0xE4, 0x32, 0x01, 0x9B, 0xAB, 0xE8, 0x7F };
内容的提问来源于stack exchange,提问作者StealthRT
相关产品推荐
相关产品推荐

