我正在使用 VS 2012 和 C++ 编程。我有一个宽字符串
wchar_t *str = L"Hello world".
从技术上讲,我是从文件中读取字符串的,但我不知道这是否有所不同。当我在内存窗口中查看 str
时,它看起来像这样:
00 48 00 65 00 6c 00 6c 00 6f 00 2c 00 20 00 77 00 6f 00 72 00 6c 00 64 00 21 00
如您所见,字符串以大端方式存储在内存中。
当我将鼠标悬停在我得到的字符串上时:
L"䠀攀氀氀漀Ⰰ 眀漀爀氀搀℀"
在我反转 str
的字节顺序后,内存看起来像:
48 00 65 00 6c 00 6c 00 6f 00 2c 00 20 00 77 00 6f 00 72 00 6c 00 64 00 21 00 00
悬停看起来像:
L"Hello, world!"
似乎调试器默认以 little-endian 显示 UTF-16。我的程序读取大端文件,因此不断反转所有字符串的字节序以调试它们非常繁琐。有什么方法可以更改调试器显示的字节序?
除了调试目的,我可以在大端进行所有处理。
最佳答案
不仅仅是调试器。 Visual Studio 的 wchar_t 函数与主机一样是小端。当您想要处理数据时,无论如何都需要将字符串字节序反转为小端字节序。
即使您将字符串输出到具有不同字节顺序的文件中,也值得进行此更改。字符串被定义为字节序列,无论如何,将字节顺序应用于字符串看起来很奇怪。
关于c++ - 设置 VS 调试器的字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284192/