字节数组右移

纳文·库马尔(Naveen Kumar)

我有两个8位十六进制字符串。我需要对这两个十六进制字符串进行应用和运算,然后将右移应用于7位并获得十进制值。我尝试将十六进制字符串转换为长度为4的字节数组(8 * 2 = 32位= 4字节),并以相同顺序对单个字节进行了&操作,将结果保存到长度为4的另一个byre数组中。到这个字节数组?

Ex : data1 in hex: 0x40003019,  
     data1 in bits: 0100-0000 0000-0000 0011-0000 0001-1001,
     data1 in bytes:    64   0  48  25,
     data2 in hex: 0x00FFFF80,
     data2 in bits : 0000-0000 1111-1111 1111-1111 1000-0000,
     data2 in bytes :  0 255 255 128

data1Bytes和data2Bytes之间的AND操作给出输出:bytearray1 [0,0,48,0](这些0000-0000 0000-0000 0011-0000 0000-0000的位,十进制值为12,288)。

到这一步为止,我所有的转换和计算都按预期进行。现在我需要将此最终结果的7位右移,应为0000-0000 0000-0000 0000-0000 0110-0000(十进制值为96)。

1)我尝试将字节数组转换为int并应用右移

 var res = BitConverter.ToInt32(bytearray1, 0);
 var shift = res >> 7;

但是res = 3145728(应为12,228)和shift = 24,576(应为96)

2)我已经厌倦了将bytearray1 [0,0,48,0]转换为BitArray,但是结果BitArray中的位却是相反的顺序

var bitArray = new BitArray(bytearray1);

bitArray [0] ... bitArray [19] =假,bitArray [20] = bitArray [21] =真,bitArray [22] ... bitArray [31] =假。

bitArray [0] ----------- [31]:0000 0000 0000 0000 0000 0000 1100 0000 0000,

将该结果位错误地移位。请帮助我,我想念的是什么?

马修·沃森(Matthew Watson)

我不确定为什么这对您不起作用,但是当我尝试这种明显的方法时,它会起作用。

首先,假设您的uint有两个十六进制数字

uint data1 = 0x40003019;
uint data2 = 0x00FFFF80;

现在,将它们与在一起,然后右移结果:

uint anded  = data1 & data2;
uint result = anded >> 7; // Gives 96 as requested.

结果为96

如果您输入的是形式的字符串,则string str = "0x40003019";可以将其转换为如下形式uint

uint data1 = uint.Parse(str.Substring(2), NumberStyles.HexNumber);

str.SubString(2)仅仅是剥去"0x"前缀。如果输入字符串没有"0x"前缀,则没有必要

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章