如何将十六进制字符串转换为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'));
}