2016-12-16 40 views
1

我有两个长度为8位的Hex字符串。如何做到这两个&操作并获得导致十六进制:并对十六进制字符串进行操作

40003019 & FE000000 => 40000000 

我已经试过转换十六进制字符串字节数组,并做个人
字节&字节这导致字节,在这种情况下,我得到4字节。我正在寻找直接的Hex结果。

我该怎么做?

var byteResult = new byte[4]; 
var byteArray1 = StringToByteArray("40003019"); 
var byteArray2 = StringToByteArray("FE000000"); 
for(int i = 0 ; i< 4; i++) 
{ 
    byteResult[i] = (byte)(byteArray1[i] & byteArray1[i]); 
} 

public static byte[] StringToByteArray(string hex) 
{ 
    return Enumerable.Range(0, hex.Length) 
        .Where(x => x % 2 == 0) 
        .Select(x => Convert.ToByte(hex.Substring(x, 2), 16)) 
        .ToArray(); 
} 
+4

你有没有试过的代码? –

+2

听起来像你应该解析每个字符串,执行按位&,然后格式化结果... –

+0

我已经尝试将十六进制字符串转换为长度为4的字节数组并执行单个字节&操作并导致字节。但我正在寻找直接的Hex和操作。 –

回答

3

转换(至整数),计算(按位和 - &),转换(返回字符串):

string left = "40003019"; 
    string right = "FE000000"; 

    string result = 
    (Convert.ToUInt32(left, 16) & Convert.ToUInt32(right, 16)).ToString("X8"); 

在一般的情况下(其可被beoynd UInt64范围长串)

private static int CharToByte(char value) { 
    if (value >= '0' && value <= '9') 
    return value - '0'; 
    else if (value >= 'a' && value <= 'f') 
    return value - 'a' + 10; 
    else if (value >= 'A' && value <= 'F') 
    return value - 'A' + 10; 
    else 
    return -1; 
} 

private static string BitwiseAnd(String left, String right) { 
    // left and right can have different lengths 
    int n = Math.Min(left.Length, right.Length); 

    StringBuilder sb = new StringBuilder(n); 

    for (int i = 0; i < n; ++i) { 
    int v = CharToByte(left[left.Length - n + i]) & 
      CharToByte(right[right.Length - n + i]); 

    sb.Append(v.ToString("X1")); 
    } 

    return sb.ToString(); 
} 

... 

string left = "40003019"; 
string right = "FE000000"; 

string result = BitwiseAnd(left, right); 
+0

这么简单的代码,谢谢:) –

+0

OMG - 这太深了:) –

相关问题