我在 C# 中遇到了一个问题,并且在将多个十六进制值的字符串转换为字节 [] 时遇到问题。
string word = "xCDx01xEFxD7x30";
(x
开始每个新值,所以我有:CD 01 EF D7 30
)
这是我第一次在这里提问,所以如果您需要我提供任何额外的东西,请告诉我。
有关该项目的更多信息:
我需要能够同时更改两者
"apple"
并"xCDx01xEFxD7x30"
到字节数组。
对于我使用的普通字符串"苹果">
byte[] data = Encoding.ASCII.GetBytes(word);
这似乎不适用于我得到值"xCDx01xEFxD7x30"
63, 1, 63, 63, 48
好的...您尝试直接"向下转换"/"向上转换"char
<->byte
(其中char
是 C#char
,长度为 16 位,字节长为 8 位)。
有多种方法可以做到这一点。最简单的(可能不是性能更高的)是使用iso-8859-1编码,将字节值 0-255 "映射"到 unicode 代码 0-255(并返回)。
Encoding enc = Encoding.GetEncoding("iso-8859-1");
string str = "apple";
byte[] bytes = enc.GetBytes(str);
string str2 = enc.GetString(bytes);
你甚至可以做一点 LINQ:
string str = "apple";
// This is "bad" if the string contains codepoints > 255
byte[] bytes = str.Select(x => (byte)x).ToArray();
// This is always safe, because by definition any value of a byte
// is a legal unicode character
string str2 = string.Concat(bytes.Select(x => (char)x));