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

本文关键字:字符串 值在 十六进制 转换 ASCII | 更新日期: 2023-09-27 18:19:38

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

string command "0xABCD1234";

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

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

此外,这个十六进制字符串将是32个十六进制字符长(即256位长)。

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

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

我想我明白你需要什么。。。这是主要的代码部分。。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'));
}