代码之家  ›  专栏  ›  技术社区  ›  Albert D. Kallal

将Unicode字节数组转换为二进制字节数组

  •  0
  • Albert D. Kallal  · 技术社区  · 6 年前

    我有一个byte()数组,其中包含Unicode数据。我需要把这个字节数组转换成二进制数据。

    最初的数据是二进制数据,但是数据被保存为unicode,因此这些数据结构现在都是需要的2倍大。

    我是否可以从一种类型的字节数组转换为另一种类型的字节数组,或者是否需要循环来跳过每一个其他字节?

    编辑:

    需要更多信息的评论

    原始字节数组是unicode utf32,看起来是该格式。

    输出字节数组需要删除额外的编码。

    因此,假设是这样,那么endianunicode作为字节来丢弃额外的数据非常有效

    这似乎有效:

     b2 = System.Text.Encoding.BigEndianUnicode.GetBytes
                (System.Text.Encoding.UTF32.GetString(b))
    

    当然,不清楚为什么得到的数组的大小不是1/2,但上面的方法似乎确实有效。

    编辑2: 好的,如前所述,问题不仅仅是如何转换,而是Btye数组到Btye数组。此外,这个数组确实是unicode的,但是原始的二进制字节数组是基于用户本地代码页(英语)的。

    所以我需要的正确转换是:

     b2 = System.Text.Encoding.Default.GetBytes
                (System.Text.Encoding.Unicode.GetString(b))
    

    但是,上面的内容从字节数组转换为字符串,然后再转换回字节数组。我的问题仍然是如何从字节数组到字节数组。事实证明你可以做到这一点,这就是:

    Dim b() As Byte
    b = reader(0)   ' the array is filled with Unicode (air code)
    Dim b2() As Byte
    ' convert byte array - not have to convert to strings
    
    Dim cFrom As System.Text.Encoding = System.Text.Encoding.Unicode
    Dim cto As System.Text.Encoding = System.Text.Encoding.Default
    
    b2 = System.Text.Encoding.Convert(cFrom, cto, b)
    

    如上所述,根据我最初的问题,上面是byte()数组到byte()数组。 注意上面的“default”当然是默认的代码页(在我的例子中是运行英文版windows的计算机)。

    0 回复  |  直到 6 年前