System.Text.Encoding.Unicode.GetBytes(**.Text.ToString())
写汉字的时候,基本没什么问题。可是写字母和数字的时候,比如数字45,Unicode十六进制代码是3435,写入RFID标签的一块,只能写8位16进制,写汉字的时候,可以写两个,数字和字母应该可以写8个,但是写入的时候成了34003500,与汉字对比正确的应该是34350000.不知道我有没有把问题说清楚
请问这是什么原因?

解决方案 »

  1.   

    Unicode即统一码,将世界上各种语言字符的不同的编码形式进行统一编码,设定一个唯一的两字节编码,其中也包括英文,即ASCII码,ASCII编码是7位二进制,变成8位二进制,再在前面添一个字节00H,所以字符4就变成了0034H,在计算机中存储时低字节在前,就是你看到的3400H。
    你的想法是将汉字转换为GB2312编码,英文字符转换为ASCII编码,汉字刚好是两个字节,但要注意低字节在前,英文字符的00H则要自己去掉。
      

  2.   


    对对对 那干脆写数字的时候 不用Unicode编码了 这样可以吧
      

  3.   

    当然,4个字节最多表示4294967296
    这么长的字符串用Unicode就完蛋了说到底,Unicode不适合存储。
      

  4.   

    数字与字母是采用ascii码,这与存储汉字的国标码冲突
      

  5.   

    谢谢楼上各位!
    那是不是说,即使我直接用ASCII编码,那俩0还是去不掉啊,这样和汉字一样每块只能写2个汉字,2个数字,2个字母,没有别的办法了?
      

  6.   

    不同的编码是有不同的特点的,Unicode编码中所有的字符都是占用两字节,ASCII码占用一个字节,每个字符的编码值都小于80H,GB2312编码的汉字占用两个字节,与Unicode不同的是这两字节的都大于0A0H,所以去掉00H之后不会造成冲突,根据值大小来区分就可以了,这就是编码的魅力。
      

  7.   

    GB2312编码中的数字和字母与ASCII码中的数字和字母是不同的,包括你现在咱们写的文字中的英文字符也不是正常的ASCII码的状况,你可以把这些字符复制到记事本中设置为宋体看,两个英文字符占用一个汉字的显示位置,而GB2312中的数字和英文字符是按照中文的习惯取的字模,一个字符就占用一个汉字的显示位置,实际上这些字符根本是不会用的。
      

  8.   

    Console.WriteLine(Encoding.GetEncoding("GB2312").GetByteCount("123"));  //3
    Console.WriteLine(Encoding.GetEncoding("GB2312").GetByteCount("大家好")); //6
      

  9.   

    把汉字、数字、字母等写入RFID标签 一个数据块只能写两个汉字的长度