将String Array转换为十六进制数组

时间:2017-07-28 10:49:44

标签: .net arrays

我有一个字符串数组

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;
}

2 个答案:

答案 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();
}