簡體   English   中英

在C#中將十六進制轉換為ASCII時遇到問題

[英]Trouble converting hex to ascii in C#

以下代碼有問題,出現此錯誤...

值對於字符來說太大或太小...在線

sb.Append(Convert.ToChar(Convert.ToUInt32(hs,16)));

        for (int i = 0; i < hexString.Length - 1; i += 2)
        {
            String hs = hexString.Substring(i, i + 2);

            sb.Append(Convert.ToChar(Convert.ToUInt32(hs, 16)));

        }

對C#有什么新建議嗎?

謝謝 :)

轉換為UInt32位基數16(十六進制)時,您的十六進制子字符串似乎太大(超出范圍),與您使用的字符集無關。

檢查您對Uint32的轉換,並確保它確實可以轉換為char,這意味着它是有效的。

編輯

正如@Lasse指出的那樣, Substring需要一個起始索引和一個length ,但是您似乎要嘗試將其傳遞一個起始索引和一個終止索引 ,因為您要將i + 2傳遞給每個調用。 這意味着第一個迭代將創建一個兩個字符的子字符串,第二個將創建一個三個字符的子字符串,依此類推。 只需將2傳遞給它:

String hs = hexString.Substring(i, 2);

那應該糾正實際問題。

盡管這沒有任何壞處,但是您應該知道所做的並不是轉換為ASCII。 ASCII是一種特殊的字符編碼,而Convert.ToChar會將數字轉換為其對應的Unicode (特別是UTF-16)字符。 只要您的值范圍從0127 (十六進制為007F ),那么您就可以滿足所有實際用途,因為Unicode格式與標准ASCII字符集共享字符。 但是,如果您的字符使用ASCII擴展名之一(例如,Latin-1,在Windows上很常見),則這些字符將匹配。

如果您的數據為ASCII格式,並且需要支持大於127的值,則可以將十六進制字符串轉換為byte[] ,然后將其傳遞給ASCIIEncoding類,以使用ASCII格式解析該數據:

byte[] data = new byte[hexString.Length / 2];

for(int i = 0; i < hexString.Length - 1; i += 2)
{
    data[i / 2] = byte.Parse(hexString.Substring(i, 2));
}

string output = System.Text.Encoding.ASCII.GetString(data);
string assumedASCII = string.Format(@"\x{0:x4}", (int)hexString);

暫無
暫無

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

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