如何在C#中将十六进制字符串转换为字节?

12

我该如何将这个字符串转换为字节?

string a = "0x2B";

我尝试了这段代码 (byte)(a); 但它显示:

无法将类型字符串转换为字节...

当我尝试使用这段代码 Convert.ToByte(a);byte.Parse(a); 时,它们显示:

输入字符串不符合正确的格式...

这应该用什么样的代码呢?

但是,例如在一个数组中声明它时,它是可以接受的...

例如:

byte[] d = new byte[1] = {0x2a};
5个回答

13

由于您的输入字符串包含十六进制数字,因此在Convert.ToByte中必须指定要使用的基数:

byte b = Convert.ToByte(a, 16);

5
byte b = Convert.ToByte(a, 16);

4
你可以使用Convert助手类的ToByte函数:
byte b = Convert.ToByte(a, 16);

2

更新:

正如其他人所提到的,我原来建议使用 byte.Parse()NumberStyles.HexNumber 在带有 "0x" 前缀的十六进制字符串中实际上不起作用。最好的解决方案是使用其他答案中建议的 Convert.ToByte(a, 16)

原始答案:

Try using the following:

byte b = byte.Parse(a, NumberStyles.HexNumber, CultureInfo.InvariantCulture);

如果字符串恰好等于“Pie”,这将导致异常,您应该详细说明如何避免这种情况。正如Douglas所解释的那样,考虑到在此上下文中x被认为无效,因此这也不适用于“Ox”。 - Security Hound

2

您可以使用UTF8Encoding

public static byte[] StrToByteArray(string str)
{
    System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
    return encoding.GetBytes(str);
}

1
你误解了问题。 - jason
你可以删除你的答案。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接