xml*_*lmx 2 c++ string unicode standards endianness
我知道UTF-16有两种类型的endianness:big endian和little endian.
C++标准是否定义了std :: wstring的字节顺序?或者它是实现定义的?
如果它是标准定义的,那么C++标准的哪个页面提供了有关此问题的规则?
如果它是实现定义的,如何确定它?例如在VC++下.编译器是否保证std :: wstring的字节序严格依赖于处理器?
我必须知道这一点; 因为我想将UTF-16字符串发送给其他人.我必须在UTF-16字符串的开头添加正确的BOM以指示其字节顺序.
简而言之:给定一个std :: wstring,我该如何可靠地确定它的字节序?
Endianess依赖于MACHINE,而不依赖于语言.Endianess由处理器定义,以及它如何在内存中排列数据.当处理wchar_t(比单个字节宽)时,处理器本身在读或写时根据需要对齐多个字节,以便再次读取或写回RAM.代码只是将其视为处理器内部寄存器中表示的16位(或更大)字.
为了确定(如果那是你想要做的)endianess(你自己),你可以尝试将一个KNOWN 32位(unsigned int)值写入ram,然后使用char指针读回它.查找返回的排序.
它看起来像这样:
unsigned int aVal = 0x11223344;
char * myValReadBack = (char *)(&aVal);
if(*myValReadBack == 0x11) printf("Big endian\r\n");
else printf("Little endian\r\n");
Run Code Online (Sandbox Code Playgroud)
我确定还有其他方法,但上面的东西应该工作,检查我的小与大虽然:-)
此外,直到Windows RT,VC++才真正编译为intel类型的处理器.他们真的只有1个endianess类型.