当前位置:  开发笔记 > 编程语言 > 正文

wchar_t数据是否需要字节序转换?

如何解决《wchar_t数据是否需要字节序转换?》经验,为你挑选了2个好方法。

在C/C++中,如果一个多字节宽字符(wchar_t)值从big-endian系统传输到little-endian系统(反之亦然),它会在另一端出现相同的值吗?或者需要交换字节?



1> Martin York..:

是的,你需要交换它们.
将按照它们放入的相同顺序从传输中检索字节.就在另一端,这些字节的顺序具有不同的含义.所以你需要将它们转换为正确的endian-ness(是一个单词?).

经过验证的方法是在传输之前转换为网络字节顺序.然后在接收时转换回主机特定的字节顺序(从网络字节顺序).

一组帮助endian转换的函数:

ntohs   Convert a 16-bit quantity from network byte order to host byte order
ntohl   Convert a 32-bit quantity from network byte order to host byte order
htons   Convert a 16-bit quantity from host byte order to network byte order
htonl   Convert a 32-bit quantity from host byte order to network byte order

只是添加另一个警告.
不同的系统对wchar_t使用不同的大小,所以不要假设sizeof(wchar_t)== 2.

另外,每个主机可以对wchar_t使用不同的表示格式.
为了帮助解决这个问题,大多数系统将文本转换为已知的传输格式(UTF-8或UTF-16是很好的选择).将文本转换回另一端的主机特定格式.

您可以查看IBM的icu,它具有所有这些功能.



2> MSalters..:

Endian转换不充分,因此不需要.Sizeof(wchar_t)不同,因此编码也不同.因此,您需要就交换格式达成一致.合乎逻辑的选择是UTF-8.但由于UTF-8是面向字节的,因此不再存在字节序问题.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有