将unicode字节arrary转换为二进制字节arrary

时间:2019-01-10 03:48:18

标签: vb.net

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

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

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

编辑:

评论要求提供更多信息

原来的字节数组是Unicode UTF32,看起来像是格式。

输出字节数组需要删除该多余的编码。

所以,假设这样,那么EndianUnicode作为字节扔掉多余的数据就很好了

这似乎可行:

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

当然还不清楚为什么所得数组的大小不完全是1/2,但是上面的方法确实可行。

Edit2: 好的,如上所述,问题不仅仅在于如何转换,而是将btye arrary转换为btye array。此外,该数组的确是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的计算机)。

0 个答案:

没有答案