[英]C# Convert Hex String Array to Byte Array
我有一个十六进制值"10" "0F" "3E" "42"
的String[]
。
我发现此方法可以转换为Byte[]
public static byte[] ToByteArray(String HexString)
{
int NumberChars = HexString.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
{
bytes[i / 2] = Convert.ToByte(HexString.Substring(i, 2), 16);
}
return bytes;
}
但是,这会将值转换为十六进制等效值。 但是这些值已经等于十六进制 !
例如,这使"10" "0F" "3E" "42"
变为"16" "15" "62" "66"
。
我希望它直接复制值,因为它们已经是正确的十六进制值。
编辑:
基本上...
我想一个字节数组的文字字符中String[]
所以说,在第二个值String[]
为0F
。 我希望Byte[]
的第一个字节为0F
而不是16
有任何想法吗?
EDIT2
让我澄清一下。 我不想将我的String[]
值转换为十六进制 ,因为它们已经是十六进制了 。 我想直接将它们复制到Byte []
问题是我的值字符串"10" "0F" "3E" 42"
已经具有我想要的十六进制值。我希望字节数组包含那些确切的值并且不转换它们,它们已经是十六进制格式。
您必须转换 (或解析 ) string
以获取byte
因为string
和byte
是不同的类型 :
// 10 == 10d
byte b = Convert.ToByte("10"); // if "10" is a decimal representation
// 16 == 0x10
byte b = Convert.ToByte("10", 16); // if "10" is a hexadecimal representation
如果要处理数组 ,可以尝试使用简单的Linq :
using System.Linq;
...
string[] hexValues = new string[] {
"10", "0F", "3E", "42"};
byte[] result = hexValues
.Select(value => Convert.ToByte(value, 16))
.ToArray();
如果要以十六进制格式输出result
,请使用格式设置( "X2"
格式字符串-至少2
十六进制数字,请使用大写字母):
// 10, 0F, 3E, 42
Console.Write(string.Join(", ", result.Select(b => b.ToString("X2"))));
与相同数组比较,但格式不同 ( "d2"
-至少2
十进制数字)
// 16, 15, 62, 66
Console.Write(string.Join(", ", result.Select(b => b.ToString("d2"))));
如果未提供任何格式,.Net将使用默认格式,并以十进制表示byte
:
// 16, 15, 62, 66
Console.Write(string.Join(", ", result));
您在这里确实混淆了表示形式和数字 。
像字符串"0F"
可以被看作是在底座16一的数的表示,即,在十进制表示,16。
与将16表示为F或0F或XVI或IIIIIIIIIIIIIIII或您选择的任何其他表示形式完全相同。
字符串"0F"
实际上在内存中看起来像这样
十六进制表示:
0x30 0x46 0x00
小数表示:
48 70 0
二进制表示形式:
0b00110000 0b01000110 0b00000000
Byte
只是一种data type
,实际上是integer
的子集。
Byte
取interger
数值,范围从-2^7(-128) to 2^7-1$(127)
调用Convert.ToByte(string, 16)
只需将string
转换为等效的hex value
,然后转换为byte
的等效值。
请注意, byte data type
始终是integer data
但用于代替整数只是为了节省内存空间。 如上所述,字节数据类型的值从-128 to 127
从而比integer data type
节省了更多的内存空间。
请注意,如果要转换为byte
的hexadecimal
值小于-128
或大于127
,则可能会出错。
当我尝试转换string
(转换为hexadecimal
时的值大于127
时,下面的链接显示此错误的实例。
每当您这样做时,您都会得到一个错误。
希望我的回答和德米特里·拜琴科(Dmitry Bychenko)能够为您的问题提供更多的启示。 如果没有,请随时发表评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.