我存储了一个String [],其十六进制值为“ 10”“ 0F”“ 3E”“ 42”。
我发现此方法可以转换为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“已经具有我想要的十六进制值。我希望字节数组包含这些确切值并且不进行转换,它们已经是十六进制形式。
答案 0 :(得分:0)
您必须转换(或解析)string
,才能获得byte
和{{1}以来的string
}是不同类型:
byte
如果要处理数组,可以尝试使用简单的 Linq :
// 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
如果您想将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
如果未提供格式,.Net将使用默认格式,并以十进制表示// 16, 15, 62, 66
Console.Write(string.Join(", ", result.Select(b => b.ToString("d2"))));
:
byte
答案 1 :(得分:0)
您在这里确实混淆了表示形式和数字。
像"0F"
这样的字符串可以看作是以16为底的数字的表示形式,即以十进制表示的 16 。
与将 16 表示为 F 或 0F 或 XVI 或 IIIIIIIIIIIIIIII 或您选择的其他任何表示形式。
字符串"0F"
实际上在内存中看起来像这样
十六进制表示形式
0x30 0x46 0x00
十进制表示形式
48 70 0
二进制表示形式:
0b00110000 0b01000110 0b00000000
答案 2 :(得分:0)
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
节省了更多的内存空间。
请注意,如果您希望转换为hexadecimal
的{{1}}值小于byte
或大于-128
,您很可能会遇到错误>
下面的链接显示了当我尝试转换127
时将其值转换为string
时大于hexadecimal
的错误的一个实例。
每次执行此操作都会收到错误消息。
我希望我的回答和德米特里·拜琴科(Dmitry Bychenko)能够为您的问题提供更多启示。 如果没有,请随时发表评论。