2016-12-16 92 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 - 這太深了:) –