【问题标题】:C# Convert a string to ASCII bytesC# 将字符串转换为 ASCII 字节
【发布时间】:2012-09-19 07:48:19
【问题描述】:

我有一个字符串:

LogoDataStr = "ABC0000"

我想转换成ASCII字节,结果应该是:

LogoDataBy[0] = 0x41;
LogoDataBy[1] = 0x42;
LogoDataBy[2] = 0x43;
LogoDataBy[3] = 0x30;
LogoDataBy[4] = 0x30;
LogoDataBy[5] = 0x30;
LogoDataBy[6] = 0x30;

我试过用这种方式:

byte[] LogoDataBy = ASCIIEncoding.ASCII.GetBytes(LogoDataStr);

但是我得到的结果是这样的:

LogoDataBy[0] = 0x41;
LogoDataBy[1] = 0x42;
LogoDataBy[2] = 0x43;
LogoDataBy[3] = 0x00;
LogoDataBy[4] = 0x00;
LogoDataBy[5] = 0x00;
LogoDataBy[6] = 0x00;

我的编码有什么问题吗?

【问题讨论】:

  • 您的代码完全返回您想要的。您确定您正在查看正确的数组吗?
  • 我同意 - 我尝试了代码并且结果是正确的(即数组在位置 [3]..[6] 不包含零,但包含正确的 ASCII 代码)。
  • dtb,0 不应该是十六进制的 0x30 吗?
  • Matthew Watson,你指的是哪个结果?
  • @Coolguy 不要复活死帖,但我很好奇问题出在哪里;我假设您已修复它,但我仍然感兴趣。

标签: c#


【解决方案1】:

只是投掷:

Encoding.ASCII.GetBytes("ABC0000").Dump();

Into LinqPAD 给出(十进制)的输出:

字节[](7 项)
65
66
67
48
48
48
48

所以我不确定你是如何得到 0x00...

【讨论】:

    【解决方案2】:

    这段代码

    class Program
    {
        static void Main(string[] args)
        {
            byte[] LogoDataBy = ASCIIEncoding.ASCII.GetBytes("ABC000");
        }        
    }
    

    产生预期的输出

    在读取 ASCII 字节之前,请仔细检查您的代码和字符串的值。

    【讨论】:

      【解决方案3】:
          class CustomAscii
          {
              private static Dictionary<char, byte> dictionary;
      
              static CustomAscii()
              {
                  byte numcounter = 0x30;
                  byte charcounter = 0x41;
                  byte ucharcounter = 0x61;
                  string numbers = "0123456789";
                  string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
                  string uchars = "abcdefghijklmnopqrstuvwxyz";
                  dictionary = new Dictionary<char, byte>();
                  foreach (char c in numbers)
                  {
                      dictionary.Add(c, numcounter++);
                  }
                  foreach (char c in chars)
                  {
                      dictionary.Add(c, charcounter++);
                  }
                  foreach (char c in uchars)
                  {
                      dictionary.Add(c, ucharcounter++);
                  }
              }
      
              public static byte[] getCustomBytes(string t)
              {
                  int iter = 0;
                  byte[] b = new byte[t.Length];
                  foreach (char c in t)
                  {
                      b[iter] = dictionary[c];
                      //DEBUG: Console.WriteLine(b[iter++].ToString());
                  }
      
                  return b;
              }
          }
      

      我会这样做。只要 Encoding.ASCII.GetBytes() 会返回错误值。

      【讨论】:

        猜你喜欢
        • 2011-01-13
        • 1970-01-01
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 2014-06-14
        • 2014-11-03
        • 1970-01-01
        • 2010-10-17
        相关资源
        最近更新 更多