我有一个字符串数组
Receivedbyte[0]=5A
Receivedbyte[1]=3A
Receivedbyte[2]=7A
Receivedbyte[3]=60
我希望将它们视为十六进制数,并将每个值的xor视为0x20。 所以我想要我的数据 0x5A ^ 0x20位于第0位。等等。
我试过以下内容,但是出现错误,输入字符串的格式不正确。
static public string[] escapeFix(string[] Receivedbyte)
{
uint temp = Convert.ToUInt32(Receivedbyte[1]);
temp = temp ^ 0x20;
Receivedbyte[0] = Convert.ToString(temp);
Receivedbyte[1] = Receivedbyte[2];
Receivedbyte[2] = Receivedbyte[3];
return Receivedbyte;
}
答案 0 :(得分:1)
Convert.ToUInt32
尝试解析十进制字符串,但输入为十六进制,因此出错。试试byte.Parse(ReceivedBytes[1], NumberStyles.AllowHexSpecifier)
。
uint.ToString()
也转换为十进制表示。你的意思是转换为十六进制?那你应该.ToString("X")
。
一旦解析完成,你的代码所做的就是与你所描述的完全矛盾。 你最终得到[“26”,“7A”,“60”,“60”],其中“26”是0x3A ^ 0x20,二十六的(十进制)表示。
为什么你首先要搞乱字符串?你不能只使用byte[]
吗?像:
public static byte[] EscapeFix(byte[] receivedBytes)
{
return receivedBytes.Select(b => (byte)(b ^ 0x20)).ToArray();
}
答案 1 :(得分:0)
您需要先将字符串解析为十六进制值,然后再进行XOR解析,然后再转换回字符串。
void Main()
{
var receivedBytes = new string[] { "5A", "3A", "7A", "60" };
escapeFix(receivedBytes);
}
public static string[] escapeFix(string[] bytes)
{
return bytes
.Select(b => Convert.ToByte(b, 16) ^ 0x20)
.Select(b => b.ToString("X"))
.ToArray();
}