前写的几天的程序  现在发现一个问题
按正常的要求  汉字应该占 2字节 如 中  应该是 4E 2D   而实际在卡中 00 00 4E 2D
这样就浪费了 2个字节
同样 英文字母也是 A 41应该 只占一个字节  可是也占了 4个  00 00 00 41请问 应该如何解决?  说个路子

解决方案 »

  1.   

    //按正常的要求  汉字应该占 2字节 如 中  应该是 4E 2D   而实际在卡中 00 00 4E 2D
    //这样就浪费了 2个字节你的写卡程序是一次写入一个长整形吧,不要把高位的两个字节空着,这两个字节还可以存一个汉字。至于英文字符,可以把它和汉字一样,当作unicode处理,这样一个长整形可以存两个英文字符。当然这样仍然浪费了一个字节,优点是unicode处理起来很方便。如果空间非常非常的重要,那就把英文字符按一个字节存储,这就需要把英文字符与汉字字符区分开,我的想法是利用最高的一个比特,如果最高位比特为1,表示这是一个英文字符的ASC码,如果最高位比特为0,表示这是一个汉字的unicode码其中的一个字节。
      

  2.   

    下载这两个文件添加到工程中:
    ------------------------------------------------------
    http://lqweb.crcoo.com/mycode/BitOp2.rar
    http://lqweb.crcoo.com/mycode/BitEx11.bas
    ------------------------------------------------------写入代码:
    ------------------------------------------------------
    Option ExplicitPrivate Sub Command1_Click()
    '一个长整形存两个汉字(Unicode格式)
    Dim lngTwoWord As LongDim s As String'存------------------------------------------------------
    s = "中国"lngTwoWord = ConWord(AscW(Left(s, 1)), AscW(Right(s, 1)))'取------------------------------------------------------s = ""s = ChrW(HiWord(lngTwoWord)) & ChrW(LoWord(lngTwoWord))MsgBox sEnd SubPrivate Sub Command2_Click()
    '一个长整形存两个英文字母(Unicode格式)
    Dim lngTwoWord As LongDim s As String'存------------------------------------------------------
    s = "zg"lngTwoWord = ConWord(AscW(Left(s, 1)), AscW(Right(s, 1)))'取------------------------------------------------------s = ""s = ChrW(HiWord(lngTwoWord)) & ChrW(LoWord(lngTwoWord))MsgBox sEnd Sub
    Private Sub Command3_Click()
    '一个长整形存混合字符(Unicode格式)
    Dim lngTwoWord As LongDim s As String'存------------------------------------------------------
    s = "中g"lngTwoWord = ConWord(AscW(Left(s, 1)), AscW(Right(s, 1)))'取------------------------------------------------------s = ""s = ChrW(HiWord(lngTwoWord)) & ChrW(LoWord(lngTwoWord))MsgBox sEnd SubPrivate Sub Command4_Click()
    '一个长整形存4个英文字母 (ANSI格式)Dim cbit As New CBitOp '如果要ANSI与Unicode混合存储,可以用它的 BitSet 和
    'BitTest方法,把ANSI字符的最高位置1,与Unicode区别开来。在这个示例代码中没有这么
    '做,处理起来太麻烦了.Dim lngTwoWord As LongDim s As String'存------------------------------------------------------
    s = "abcd"lngTwoWord = ConWord(Con(AscB(Left(s, 1)), _
    AscB(Mid(s, 2, 1))), Con(AscB(Mid(s, 3, 1)), _
    AscB(Right(s, 1))))'取------------------------------------------------------s = ""s = ChrW(Hi(HiWord(lngTwoWord))) & _
    ChrW(Lo(HiWord(lngTwoWord))) & _
    ChrW(Hi(LoWord(lngTwoWord))) & _
    ChrW(Lo(LoWord(lngTwoWord)))MsgBox sEnd Sub
    ------------------------------------------------------