我在二进制文件中读取3个字节,我需要将其转换为整数。
我使用此代码读取字节:
LastNum last1Hz = new LastNum();
last1Hz.Freq = 1;
Byte[] LastNumBytes1Hz = new Byte[3];
Array.Copy(lap_info, (8 + (32 * k)), LastNumBytes1Hz, 0, 3);
last1Hz.NumData = LastNumBytes1Hz[2] << 16 + LastNumBytes1Hz[1] << 8 + LastNumBytes1Hz[0];
last1Hz.NumData
是integer
。
这似乎是在我见过的帖子中将bytes
转换为integers
的好方法。
以下是对读取值的捕获:
但整数last1Hz.NumData
始终为0。
我错过了一些东西但却无法弄清楚是什么。
答案 0 :(得分:4)
您需要使用括号(因为加法具有比位移更高的优先级):
int a = 0x87;
int b = 0x00;
int c = 0x00;
int x = c << 16 + b << 8 + a; // result 0
int z = (c << 16) + (b << 8) + a; // result 135
您的代码应如下所示:
last1Hz.NumData = (LastNumBytes1Hz[2] << 16) + (LastNumBytes1Hz[1] << 8) + LastNumBytes1Hz[0];
答案 1 :(得分:0)
我认为问题是优先顺序问题。在&lt;&lt;之前评估+ 放入括号以强制首先评估位移。
last1Hz.NumData = (LastNumBytes1Hz[2] << 16) + (LastNumBytes1Hz[1] << 8) + LastNumBytes1Hz[0];