Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 十六进制字符串上的And运算_C#_.net - Fatal编程技术网

C# 十六进制字符串上的And运算

C# 十六进制字符串上的And运算,c#,.net,C#,.net,我有两个长度为8位的十六进制字符串。如何对这两个对象执行&操作并以十六进制形式获得结果: 40003019 & FE000000 => 40000000 我曾尝试将十六进制字符串转换为字节数组,并进行了单独的 byte&byte,结果是byte,在这种情况下,我分别得到4个字节。我在寻找直接的结果 我该怎么做 var byteResult = new byte[4]; var byteArray1 = StringToByteArray("40003019"); var byte

我有两个长度为8位的十六进制字符串。如何对这两个对象执行
&
操作并以十六进制形式获得结果:

40003019 & FE000000 => 40000000
我曾尝试将十六进制字符串转换为字节数组,并进行了单独的
byte&byte,结果是byte,在这种情况下,我分别得到4个字节。我在寻找直接的结果

我该怎么做

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();
}
var byteResult=新字节[4];
var byteArray1=StringToByteArray(“40003019”);
var byteArray2=StringToByteArray(“FE000000”);
对于(int i=0;i<4;i++)
{
byteResult[i]=(字节)(byteArray1[i]&byteArray1[i]);
}
公共静态字节[]StringToByteArray(字符串十六进制)
{
返回可枚举的范围(0,十六进制长度)
。其中(x=>x%2==0)
.Select(x=>Convert.ToByte(十六进制子字符串(x,2,16))
.ToArray();
}
转换(到整数)、计算(按位和-
&
),转换(返回到字符串):

一般情况下(长字符串可以是beoynd
UInt64
range)

private static int CharToByte(字符值){

如果(value>='0'&&value='a'&&value='a'&&value您有没有尝试过的代码?听起来您应该解析每个字符串,按位执行&,然后格式化结果…我尝试过将十六进制字符串转换为长度为4的字节数组,并执行单个字节和运算,结果是字节。但我正在寻找直接的十六进制和运算。这里还有另一个方法:UInt32 a=UInt32.Parse(“40003019”,System.Globalization.NumberStyles.HexNumber);UInt32 b=UInt32.Parse(“FE000000”,System.Globalization.NumberStyles.HexNumber”);Console.WriteLine((a&b.ToString(“x8”);Console.ReadLine();OMG-这太深了:)
  string left = "40003019";
  string right = "FE000000";

  string result = 
    (Convert.ToUInt32(left, 16) & Convert.ToUInt32(right, 16)).ToString("X8");
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);