2016-12-16 1 views
1

長さ8桁の2つの16進文字列があります。どのようにこれらの二つの上&操作を行うにして六角になります:そして16進文字列の操作

40003019 & FE000000 => 40000000 

私はバイト配列に16進文字列を変換して、私は4を取得しています。その場合にはバイトになり、個々の
バイト&バイトをやって試してみましたバイトを個別に私は直接16進の結果を探しています。

どうすればいいですか?

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

16進数の文字列を長さ4のバイト配列に変換し、個々のバイト&演算と結果をバイトで処理しようとしました。しかし、私は直接ヘックス&操作を探しています。 –

答えて

3

(整数)に変換し、計算(ビット単位および - &)、(バック文字列に)変換する:一般的なケースで

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

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

UInt64範囲beoyndすることができ、長い文字列)

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 - これはあまりにも深いです:) –

関連する問題