如何从字符串中适当地获取字符串?

时间:2011-12-01 08:37:42

标签: c# encoding

我有一个字符串变量,我可以通过以下循环从中获取以下字节:

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

如何摆脱该循环并使用Encoding的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;
}

2 个答案:

答案 0 :(得分:3)

您的hexToString正在将字节值(通过十六进制)直接传输到0-255范围内的unicode代码点。碰巧,这与代码页28591有关,所以如果你使用:

Encoding enc = Encoding.GetEncoding(28591);

并使用 enc,您应该获得正确的数据;但是,更重要的一点是二进制数据与文本数据不同,您不应该使用string来保存任意二进制数据。

答案 1 :(得分:2)

假设您正在尝试“解码”字符串文字:
C#在内部将字符串存储为Unicode。 因此,您可能希望使用(正确)支持Unicode

的编码

如:

Encoding.UTF8.GetBytes(source)
Encoding.UnicodeEncoding.GetBytes(source)

请注意MSDN

Encoding.Default的注意事项