VB.NET中16位数据拆分8位后还原数值不符的技术问题
问题排查分析
你的代码逻辑本身是正确的:原十六进制值
&HA91对应十进制2705,拆分后高字节为0xA(十进制10)、低字节为0x91(十进制145),组合运算(0xA << 8) | 0x91会得到原数值0xA91(十进制2705),代码应输出The values match!。你提到还原后得到十进制2570(对应十六进制
0xA0A),说明实际运行时拆分后的高低字节均为0xA(十进制10),可能的原因包括:- 代码与提供的不一致:实际运行的代码中
lowByte的赋值逻辑错误,比如误将lowByte写成和highByte相同的右移取高8位逻辑,导致高低字节重复取原数值的高8位。 - 数值转换/读取错误:你可能混淆了十六进制与十进制的转换,或是看错了控制台输出的十六进制值(比如把
0xA91误看成0xA0A)。 - 原数值赋值错误:实际代码中
originalValue的赋值可能是&HA0A(十进制2570)而非&HA91,导致还原后数值与原数值一致,但你误以为原数值是2705。
- 代码与提供的不一致:实际运行的代码中
快速验证方法:在代码中添加十进制数值的输出语句,确认各变量的实际值:
Console.WriteLine("Original Value (Decimal): {0}", originalValue) Console.WriteLine("High Byte (Decimal): {0}", highByte) Console.WriteLine("Low Byte (Decimal): {0}", lowByte) Console.WriteLine("Combined Value (Decimal): {0}", combinedValue)运行后查看各变量的十进制数值,即可定位问题所在。
内容的提问来源于stack exchange,提问作者nyl
相关产品推荐
相关产品推荐

