2013-06-28 37 views
0

我有一个十六进制值,例如,以下八位字节:82 A9 43c#二进制运算在十六进制值

我需要删除它们中的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 

上面应该转换为整数。

您是否有线索,如何做到这一点。感谢您的帮助。

+0

你是如何得到这些价值的?你对某个东西应用了“ToString()”吗? – musefan

+0

我从UDP流获得的原始值。即:82 A9 43 – user726720

+0

我的意思是你如何获得二进制值?例如,如何将'r1'转换为'10'? – musefan

回答

1

前导0的二进制值不真正做任何事情,所以你可以指望的人物,并添加0的回到他们面前,然后将它们连接起来一起

string PadLeft (string s) { 
    return string.Format("({0,8})", s) 
} 
+0

这里的想法是这些值是作为十六进制字符串的udp流来的,我想通过去除那里最重要的位(在左边)来处理它们,所以所有八位字节都有七位,然后我需要连接这7位并得到一个整数结果,如上面的问题所示 – user726720

+0

@ user726720我明白你说的是什么,但是引导零*不重要。 '00001 == 1'。即使您转换为字符串并填充字符串,然后转换回整数,C#也会剥离前导零。 –

+0

所以你想建立一个21位整数?如果你稍微解释一下目的,人们可能会提供更好的建议。下面的用户Jonesy给出了一个很好的方法来填充零,尽管 – CamHenlin

0

有没有必要转换成字符串,然后回到整数,只是做整数运算这样的:

int concat = r1 << 16 | r2 << 8 | r3; 

以上简要:

int ttt = 0x7f7f7f; 
int concat = (hv1 << 16 | hv2 << 8 | hv3 & ttt; 
0

数字上,前导零不相关。让你的函数返回一个数字的字符串表示,这样你可以将它填充到8个字符。

0

如果你想让他们为你所描述他们,就像钉在一些零的前面,也不会改变二进制值

private static string AddZeros(string r) 
    { 
     while (r.Length < 8) 
      r = "0" + r; 

     return r; 
    } 
1

目前尚不清楚你如何将你的整数值成二进制字符串,但我想你正在做这样的事情:

string binaryR1 = Convert.ToString(r1, 2);//binaryR1 = "10" 

然后,您可以垫使用PadLeft()函数的字符串:

binaryR1 = binaryR1.PadLeft(7, '0');//binaryR1 = "0000010" 

或单行:

string binaryR1 = Convert.ToString(r1, 2).PadLeft(7, '0');//binaryR1 = "0000010" 

注意:这些值已被填充到7个位数,你不需要MSB

将此应用于所有3个值,那么将允许您Concat的进入满弦:

string full = binaryR1 + binaryR2 + binaryR3;//full = "000001001010010100011" 
+0

你的解决方案也在工作,谢谢。 – user726720

-1

尝试这样:

int r1 = hv1 & 0x7F; 
int r2 = hv2 & 0x7F; 
int r3 = hv3 & 0x7F; 
int res = (r1 << 14) | (r2 << 7) | r3; 

这应该剥夺每个字节的第8位,然后拼接位每0-7成一个21位的数字:

111111122222223333333 // where 1 are bits from r1, 2 from r2 and so on 

这是你想要的吗?