C#将字符串转换为ASCII字节

时间:2012-09-19 07:48:20

标签: c#

我有一个字符串:

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 个答案:

答案 0 :(得分:9)

此代码

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

产生预期产出

enter image description here

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

答案 1 :(得分:0)

扔掉:

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

进入LinqPAD会得到(十进制)的输出:

  

Byte [](7项)
  65个
  66个
  67个
  48个
  48个
  48个
  48

所以我不确定你是怎么得到0x00 ......

答案 2 :(得分:0)

    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;
        }
    }

我就是这样做的。 JUST IF Encoding.ASCII.GetBytes()会返回错误的值。