【发布时间】:2013-06-26 10:37:24
【问题描述】:
我有一个十六进制值,例如以下八位位组:82 A9 43
我需要删除所有的 8 位并将它们连接在一起。
例如:如果我们将每个更改为二进制:
82 = 10000010
A9 = 10101001
43 = 01000011
现在我需要使用以下代码删除以上所有内容的 MSB:
int t = 0x7F;
int hv1 = 0x82;
int hv2 = 0xA9;
int hv3 = 0x43;
int r1 = hv1 & t;
int r2 = hv2 & t;
int r3 = hv3 & t;
经过上述过程后如下图:
r1 = 10
r2 = 101001
r3 = 100011
但我需要如下:
r1 = 0000010
r2 = 0101001
r3 = 0100011
原因是后来我想连接所有的 r1 | r2 | r3 如下:
000001001010010100011
然后应该将上面的内容转换为整数。
您是否有线索,如何做到这一点。感谢您的帮助。
【问题讨论】:
-
您是如何获得这些值的?你在申请
ToString()吗? -
我从 UDP 流中获取的原始值。即:82 A9 43
-
我的意思是你如何获得二进制值?例如,如何将
r1转换为10? -
从 UDP 流中读取时在 SNMP 中:第 8 个 MSB 位是切换位,需要剥离,然后剩余的 7 位应与下一个字节连接。但是我在这里使用的八位字节值是示例(82 A9 43),它们在实际场景中可能会有所不同。但我的目标是一样的。取 OID 字节检查第 8 位是否为 1,如果是,则将其剥离为 7 位并连接到下一个八位字节(下一个八位字节将具有相同的 7 位,并去掉第 8 位)
-
@musefan:我正在使用 0x7F 删除第 8 位,但这样做 C# 也会删除前导零,这是我不想要的,我想为每个八位字节保留 7 位