如何将十六进制字符串转换为ASCII值在C#中具有相同值的字符串
本文关键字:字符串 值在 十六进制 转换 ASCII | 更新日期: 2023-09-27 18:19:38
假设我有一个包含十六进制值的字符串。例如:
string command "0xABCD1234";
如何将该字符串转换为另一个字符串(例如,string codedString = ...
),以便该新字符串的ASCII编码表示与原始字符串内容具有相同的二进制值?
我之所以需要这样做,是因为我有一个来自硬件制造商的库,可以通过SPI将数据从他们的硬件传输到另一个硬件。它们的函数以字符串作为输入,但当我试图发送"AA"时,我希望SPI发送二进制10101010,但它发送的却是AA的ascii表示,即0110000101100001。
此外,这个十六进制字符串将是32个十六进制字符长(即256位长)。
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'));
}