我存储了一个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;
}
Run Code Online (Sandbox Code Playgroud)
但是,这会将这些值转换为等效的十六进制值。但这些值已经是十六进制等效值了!
例如,这"10" "0F" "3E" "42"使得"16" "15" "62" "66".
我希望它直接复制这些值,因为它们已经是正确的十六进制值。
编辑:
基本上...
我想要一个带有文字字符的字节数组String[]所以说第二个值String[]是0F。我希望第一个字节是Byte[]而0F不是 16
有任何想法吗?
编辑2
让我澄清一下。我不想将我的String[]值转换为Hexadecimal,因为它们已经是Hexadecimal。我想直接将它们复制到 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
Run Code Online (Sandbox Code Playgroud)
如果你想处理一个数组,你可以尝试一个简单的Linq:
using System.Linq;
...
string[] hexValues = new string[] {
"10", "0F", "3E", "42"};
byte[] result = hexValues
.Select(value => Convert.ToByte(value, 16))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
result如果您想以十六进制打印,请使用格式("X2"格式字符串 - 至少2 十六进制数字,使用大写字母):
// 10, 0F, 3E, 42
Console.Write(string.Join(", ", result.Select(b => b.ToString("X2"))));
Run Code Online (Sandbox Code Playgroud)
与相同数组但不同格式进行比较("d2"-至少2 十进制数字)
// 16, 15, 62, 66
Console.Write(string.Join(", ", result.Select(b => b.ToString("d2"))));
Run Code Online (Sandbox Code Playgroud)
如果没有提供格式,.Net 使用默认格式并byte以十进制表示:
// 16, 15, 62, 66
Console.Write(string.Join(", ", result));
Run Code Online (Sandbox Code Playgroud)