如何将十六进制字符串转换为ASCII值在C#中具有相同值的字符串?

时间:2013-06-21 20:26:53

标签: c# string hex ascii

假设我有一个包含十六进制值的字符串。例如:

string command "0xABCD1234";

如何将该字符串转换为另一个字符串(例如string codedString = ...),以使此新字符串的ASCII编码表示与原始字符串 contents 具有相同的二进制文件?

我需要这样做的原因是因为我有一个来自硬件制造商的库,可以通过SPI将数据从他们的硬件传输到另一块硬件。它们的函数将字符串作为输入,但是当我尝试发送“AA”时,我希望SPI传输二进制10101010,而是传输AA的ascii表示,即0110000101100001。

此外,此十六进制字符串的长度为32个十六进制字符(即256位长)。

2 个答案:

答案 0 :(得分:5)

string command = "AA";
int num = int.Parse(command,NumberStyles.HexNumber);
string bits = Convert.ToString(num,2); // <-- 10101010

答案 1 :(得分:-1)

我想我明白你需要什么...这里是主要的代码部分.. asciiStringWithTheRightBytes是你发送给你的命令。

var command = "ABCD1234";
var byteCommand = GetBytesFromHexString(command);
var asciiStringWithTheRightBytes = Encoding.ASCII.GetString(byteCommand);

它使用的子程序在这里......

static byte[] GetBytesFromHexString(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(byte)];
    for (var i = 0; i < str.Length; i++)
        bytes[i] = HexToInt(str[i]);
        return bytes;
}

static byte HexToInt(char hexChar)
{
    hexChar = char.ToUpper(hexChar);  // may not be necessary

    return (byte)((int)hexChar < (int)'A' ?
        ((int)hexChar - (int)'0') :
        10 + ((int)hexChar - (int)'A'));
}