3

我在需要将其转换为整数的二进制文件中读取了 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。

我错过了一些东西,但不知道是什么。

4

2 回答 2

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];
于 2017-07-25T08:44:05.227 回答
0

我认为问题是优先顺序问题。+ 在 << 放入括号之前进行评估,以强制首先评估位移。

 last1Hz.NumData = (LastNumBytes1Hz[2] << 16) + (LastNumBytes1Hz[1] << 8) + LastNumBytes1Hz[0];
于 2017-07-25T08:49:28.900 回答