如何从字符串适当地GetBytes
本文关键字:GetBytes 字符串 | 更新日期: 2023-09-27 18:16:23
我有一个字符串变量,我从中得到以下字节与以下循环:
Bytes I get: 1e 05 55 3c *e2 *91 6f 03 *fe 1a 1d *f4 51 6a 5e 3a *ce *d1 04 *8c
With that loop:
byte[] temp = new byte[source.Length];
string x = "";
for (int i = 0;i != source.Length;i++)
{
temp[i] = ((byte) source[i]);
}
现在我想简化这个操作并使用Encoding的GetBytes。问题是我找不到合适的编码。例:我得到了几个字节错误:
Encoding.ASCII.GetBytes(source): 1e 05 55 3c *3f *3f 6f 03 *3f 1a 1d *3f 51 6a 5e 3a *3f *3f 04 *3f
Encoding.Default.GetBytes(source): 1e 05 55 3c e2 3f 6f 03 3f 1a 1d f4 51 6a 5e 3a ce 4e 04 3f
我怎么能摆脱循环和使用编码的GetBytes?
以下是摘要:
Loop(correct bytes): 1e 05 55 3c *e2 *91 6f 03 *fe 1a 1d *f4 51 6a 5e 3a *ce *d1 04 *8c
Encoding.ASCII.GetBytes(source): 1e 05 55 3c *3f *3f 6f 03 *3f 1a 1d *3f 51 6a 5e 3a *3f *3f 04 *3f
Encoding.Default.GetBytes(source): 1e 05 55 3c e2 3f 6f 03 3f 1a 1d f4 51 6a 5e 3a ce 4e 04 3f
谢谢!
添加:
我有一个十六进制的字符串输入,例如:"B1807869C20CC1788018690341"然后我用方法把它转换成字符串:
private static string hexToString(string sText)
{
int i = 0;
string plain = "";
while (i < sText.Length)
{
plain += Convert.ToChar(Convert.ToInt32(sText.Substring(i, 2), 16));
i += 2;
}
return plain;
}
您的hexToString正在传输字节值(通过十六进制)直接到0-255范围内的unicode代码点。碰巧,这与代码页28591有关,所以如果使用:
Encoding enc = Encoding.GetEncoding(28591);
和使用 enc
,你应该得到正确的数据;然而,这里更重要的一点是二进制数据与文本数据不同,您不应该使用string
来保存任意的二进制数据。
假设您正在尝试"解码"字符串文字:
c#内部将字符串存储为Unicode。因此,您可能需要使用(正确)支持Unicode
:
Encoding.UTF8.GetBytes(source)
Encoding.UnicodeEncoding.GetBytes(source)
注意MSDN
Encoding.Default
的注意事项