none
关于字符编码的疑问 RRS feed

  • 问题

  • 在即时窗口输入:

    ?Text.Encoding.Default.GetBytes (Text.Encoding.Default.GetString(new Byte(){&HCC}))

    (我的系统是WinVista,Default代表的是GB2312。)

     

    返回结果是:

    {Length=&H1}
        (&H0): &H3F

     

    为什么这个语句运行结果不等于&HCC呢?真是难以理解了

    该怎样修改才能得到原来的结果&HCC

     

    请不吝赐教,谢谢:)

    2009年1月11日 15:44

答案

  • Convert.ToBase64String 方法

    Convert.FromBase64String 方法

    2009年1月12日 3:29
    版主
  • Array.Copy 方法 (Array, Int32, Array, Int32, Int32)

    从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。长度和索引指定为 32 位整数。

    2009年1月12日 10:03
    版主

全部回复

  • 因为&HCC不能转换为正确的字符,你看看

    Text.Encoding.Default.GetString(new Byte(){&HCC})

    2009年1月12日 1:16
    版主
  •  feiyun0112 写:

    因为&HCC不能转换为正确的字符,你看看

    Text.Encoding.Default.GetString(new Byte(){&HCC})

     

    这个我知道,但是当我要把字符串加密后保存到文件里或者想使用字符串运算的时候,应该怎么处理这个问题呢?

    遇到&HCC这种字符的情况应该是很常见的呀?

    谢谢:)

    2009年1月12日 3:15
  • Convert.ToBase64String 方法

    Convert.FromBase64String 方法

    2009年1月12日 3:29
    版主
  •  feiyun0112 写:
    Convert.ToBase64String 方法

    Convert.FromBase64String 方法

     

    Convert.ToBase64String(Bytes()) 好像不管用,转换之后的结果字节数不一样了,用Getbytes(Convert.ToBase64String(Bytes()))不能得到与原来一样的Bytes()

     

     

    我希望从字符转换为Bytes(),然后能转换为String,同时能够正确反向转换,总之要翻来覆去都能正确:)

    就像原来写的这句的意思:

    Text.Encoding.Default.GetBytes (Text.Encoding.Default.GetString(new Byte(){&HCC}))

    2009年1月12日 8:03
  • 转回来用

    Convert.FromBase64String 方法

    2009年1月12日 8:13
    版主
  •  abcjackson 写:
     feiyun0112 写:
    Convert.ToBase64String 方法

    Convert.FromBase64String 方法

     

    Convert.ToBase64String(Bytes()) 好像不管用,转换之后的结果字节数不一样了,用Getbytes(Convert.ToBase64String(Bytes()))不能得到与原来一样的Bytes()

     

     

    我希望从字符转换为Bytes(),然后能转换为String,同时能够正确反向转换,总之要翻来覆去都能正确:)

    就像原来写的这句的意思:

    Text.Encoding.Default.GetBytes (Text.Encoding.Default.GetString(new Byte(){&HCC}))

     

    Convert.ToBase64String 方法

    Convert.FromBase64String 方法

    可以解决这个问题,但是如果作为2进制文件保存则这种转换不太符合要求。

     

    想了想,还是不转换为字符串了,但是若直接用Bytes(),Bytes数组怎样合并才能达到字符串的"&"运算的效果?

     

    谢谢:)

    2009年1月12日 9:57
  • Array.Copy 方法 (Array, Int32, Array, Int32, Int32)

    从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。长度和索引指定为 32 位整数。

    2009年1月12日 10:03
    版主
  •  feiyun0112 写:
    Array.Copy 方法 (Array, Int32, Array, Int32, Int32)

    从指定的源索引开始,复制 Array 中的一系列元素,将它们粘贴到另一 Array 中(从指定的目标索引开始)。长度和索引指定为 32 位整数。

     

    你好棒啊:)

     

    那么如果要比较两段Bytes中某部分是否相同,类似与字符串的比较的效果,是否有现成的函数呢?

    例如原来要实现“if A=StrDup(7,chr(0)) then“ 现在使用了Bytes来表示A,应该怎么做呢?

     

    谢谢:)

    2009年1月13日 6:10
  • 好像没有,我想到的方法是先转成字符串再比较

    Code Snippet
    For i = 0 To bytes.Length
                str = str & "|" & bytes(i).ToString()
            Next

     

     

     

    2009年1月13日 9:28
    版主
  •  feiyun0112 写:

    好像没有,我想到的方法是先转成字符串再比较

    Code Snippet
    For i = 0 To bytes.Length
                str = str & "|" & bytes(i).ToString()
            Next

     

     

     

     

     

    .ToString()恐怕不是必要的,Bytes数组里全部Byte值都在0到255范围,

    例如:

    Bytes={87,40,30,32,125……}

    Str="87|40|30|32|125"……

    转为16进制可能整齐些:)

    Str="57281E207D"……

     

    虽然转成字符串再比较,可以利用字符串的现成的函数,但总觉得效率可能不是很好,毕竟后面打算继续用Bytes数组保存数据还得转换回来,直接用循环逐个比较数组元素的值,也许更好些吧,

    当然所有比较函数都要自己写了:)

     

     

     

     

     

    2009年1月13日 14:14