我有一个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的计算机)。