65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 中将十六进制字符串与字节数组互相转换

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (71投票s)

2003年5月7日

2分钟阅读

viewsIcon

905625

downloadIcon

14431

提供并演示了一个十六进制字符串编码/解码类

Sample Image

引言

虽然 .NET 框架提供了将字节数组转换为十六进制字符串的方法(byte.ToString(“X”)),但将十六进制字符串转换回字节数组并不那么容易。当您需要将应用程序的数据备份到纸上时,例如加密密钥,然后在用户输入后将其转换回数据时,此功能非常有用。

此处提供的 HexEncoding 类包含允许将十六进制格式的字符串转换为字节数组,以及将字节数组转换回字符串的功能。它还包含在转换之前检查字符串格式以及给定字符串将生成多少字节的功能。

背景

在十六进制字符串中,一个字节由两个十六进制字符表示。十六进制字符的值为 (A-F, 0-9)。

例如,字符串 “01FFA0” 等效于 byte[] { 1, 255, 160 }

使用代码

HexEncoding 是我创建的包含用于十六进制字符串转换的静态函数的类。

以下是单击“转换”按钮时使用它的示例,如屏幕截图所示

private void button1_Click(object sender, System.EventArgs e)
{
    string hexString = txtHex.Text;
    int discarded;
    txtByteCount.Text = ((int)HexEncoding.GetByteCount(hexString)).ToString();
    txtLength.Text = hexString.Length.ToString();
    byte[] byteArray = HexEncoding.GetBytes(hexString, out discarded);
    txtDiscard.Text = discarded.ToString();
    string temp = "";
    for (int i=0; i<byteArray.Length; i++)
    {
        temp += byteArray[i].ToString("D3") + " ";
    }
    txtByte.Text = temp;
    txtHex2.Text = HexEncoding.ToString(byteArray);
}

HexEncoding.GetByteCount(string hexString) 返回从 hexString 生成的字节数。

HexEncoding.GetBytes(string hexString, out int discarded) 返回从 hexString 转换的字节数组,并且第二个参数返回字符串中忽略的非十六进制字符数。这包括破折号、空格以及 ‘F’ 之后的字母。

HexEncoding.ToString(byte[]) 将新转换的字节数组转换回字符串形式。请注意,“-” 字符现在已消失。

框架提供的将十六进制字符串转换为单个字节的关键函数是

// byte newByte = byte.Parse(hex, System.Globalization.NumberStyles.HexNumber);

其中“hex”的形式为“1A”、“00”、“FF”等。

感谢 .NET 247 新闻组中的 Polux,他将 int.Parse(...) 答案发布到另一个十六进制问题中。

© . All rights reserved.