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

如何将十六进制字符串转换为ASCII值在C#中具有相同值的字符串?,c#,string,hex,ascii,C#,String,Hex,Ascii,假设我有一个包含十六进制值的字符串。例如: string command "0xABCD1234"; 如何将该字符串转换为另一个字符串(例如,string codedString=…),以使此新字符串的ASCII编码表示形式与原始字符串内容具有相同的二进制文件 我之所以需要这样做,是因为我有一个硬件制造商提供的库,它可以通过网络将数据从他们的硬件传输到另一个硬件。它们的函数以字符串作为输入,但当我尝试发送“AA”时,我希望SPI传输二进制文件10101010,但它传输AA的ascii表示,即0

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

string command "0xABCD1234";
如何将该字符串转换为另一个字符串(例如,
string codedString=…
),以使此新字符串的ASCII编码表示形式与原始字符串内容具有相同的二进制文件

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

此外,该十六进制字符串的长度将为32个十六进制字符(即256位); int num=int.Parse(命令,NumberStyles.HexNumber);
字符串位=Convert.ToString(num,2);// 我想我知道你需要什么。。。这是主要的代码部分。。AsistringWithRightBytes是要发送到命令的内容

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'));
}
静态字节[]GetBytesFromHexString(字符串str)
{
byte[]bytes=新字节[str.Length*sizeof(byte)];
对于(变量i=0;i
这显示了对框架的了解是如何获得回报的。我喜欢它。我需要
不包含字符串“10101010”,但任何字符串都将由二进制10101010表示@w1res那么它就是
num
。它包含这些位。(如果要发送1个字节,请使用
byte.Parse
)。顺便说一句:bits=>string并不总是可能的。每个字符串都有一个字节(位)数组表示,但每个字节数组不一定都有一个有效的字符串表示。你似乎是对的。我只是试着手工做一个例子,发现ASCII字符甚至不够高。如果可以传递给SPI函数的参数只有Int8、Int16、Int32和string,我不确定如何发送256位数据。我想我得和制造商谈谈。@w1res然后用于ex,
Send((字节)0xaa)
;Kevin,你知道有一个内置类做同样的事情吗(SoapHexBinary)?只要搜索stackoverflow。@I4V如果我知道的话,我就不会费心写代码了。:)谢谢你的提示。当我搜索时,我没有找到SoapHexBinary。
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'));
}