簡體   English   中英

如何將十六進制字符串轉換為C#中ASCII值相同的字符串?

[英]How can convert a hex string into a string whose ASCII values have the same value in C#?

假設我有一個包含十六進制值的字符串。 例如:

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'));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM