2

我很困惑为什么这不起作用,有人可以提供一些见解吗?

我有一个接收整数值的函数,但想将十六进制值的高两位存储到一个字节数组元素中。

假设距离是 (24,135) 10或 (5E47) 16

public ConfigureReportOptionsMessageData(int Distance, int DistanceCheckTime)
    {
        ...
        this._data = new byte[9];
        this._data[0] = (byte)(Distance & 0x00FF); // shows 47
        this._data[1] = (byte)(Distance & 0xFF00); // shows 00
        this._data[2] = (byte)(DistanceCheckTime & 0xFF);
        ...
    }
4

3 回答 3

2

这似乎您应该使用BitConverter.GetBytes - 它会提供一个更简单的选项。

于 2010-11-04T00:08:48.583 回答
2
this._data[1] = (byte)(Distance >> 8);

?

于 2010-11-04T00:09:05.840 回答
1

您得到的原因0_data[1]当您转换为byte.

您的中间结果如下所示:

Distance && 0xff00 = 0x00005e00;

将其转换为字节时,您只保留低位字节:

(byte)0x00005e00 = 0x00;

您需要移动 8 位:

0x00005e00 >> 8 = 0x0000005e;

在你投给byte并分配给之前_data[1]

于 2010-11-04T00:14:03.007 回答