vb.net - 将 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 的计算机)。
解决方案
推荐阅读
- java - 验证所有场景的正则表达式
- ios - 使用 SnapKit 时无法正确设置动画
- apache - Apache 403 Forbidden:访问被拒绝错误
- ios - Firebase 和 Swift:在 Firebase 上更新后在应用上实时更新用户信息
- django - DRF YASG 定制
- wcf - 新的 WCF Web 服务在一个环境中返回 401
- c++ - 允许 QGraphicsView 移出场景
- windows - 在 Windows 中更改 bash 脚本中的目录
- formula - 仅将更改的数字添加到运行列表
- python - 使用 anaconda 在 spyder 中导入和现有项目