首页 > 解决方案 > 将 unicode 字节数组转换为二进制字节数组

问题描述

我有一个充满 Unicode 数据的 byte() 数组。我需要将此字节数组转换为二进制数据。

原始数据是二进制数据,但数据保存为 Unicode,因此这些数据结构现在都是所需大小的 2 倍。

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

编辑:

评论要求更多信息

原始字节数组是Unicode UTF32 看起来是格式。

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

所以,假设这一点,那么 EndianUnicode 作为字节扔掉额外的数据工作得很好

这似乎有效:

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

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

Edit2:好的,如上所述,问题不仅仅是如何转换,而是 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() 数组。请注意,上面的“默认”当然是默认代码页(在我的情况下是运行英文版 Windows 的计算机)。

标签: vb.net

解决方案


推荐阅读