C# 十六进制字符串上的And运算
我有两个长度为8位的十六进制字符串。如何对这两个对象执行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
&
操作并以十六进制形式获得结果:
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();
}
转换(到整数)、计算(按位和-&
),转换(返回到字符串):
一般情况下(长字符串可以是beoyndUInt64
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);