gpt4 book ai didi

c++ - WideCharToMultiByte - 对于 Shift-JIS 代码页,所需的大小和写入的字节数不同

转载 作者:行者123 更新时间:2023-11-27 22:50:53 24 4
gpt4 key购买 nike

我有一个包含四个日文字符的 Unicode 字符串,我正在使用 WideCharToMultiByte 将其转换为指定 Shift-JIS 代码页 932 的多字节字符串。为了获得所需缓冲区的大小,我我首先调用 WideCharToMultiByte 并将 cbMultiByte 参数设置为 0。这按预期返回 9,但是当我再次实际调用 WideCharToMultiByte 进行转换时,它返回写入为 13 的字节数。下面是一个示例,我目前正在将我的缓冲区大小硬编码为 100:

BSTR value = SysAllocString(L"日経先物");
char *buffer = new char[100];

int sizeRequired = WideCharToMultiByte(932, 0, value, -1, NULL, 0, NULL, NULL);

// sizeRequired is 9 as expected

int bytesWritten = WideCharToMultiByte(932, 0, value, sizeRequired, buffer, 100, NULL, NULL);

// bytesWritten is 13

buffer[8] 包含预期的字符串终止符\0。 buffer[9-12] 包含字节 63。

因此,如果我将缓冲区的大小设置为 sizeRequired,它就太小了,第二次调用 WideCharToMultiByte 就会失败。有谁知道为什么要多写 4 个字节,每个字节值为 63?

最佳答案

您向 WideCharToMultiByte 传递了错误的参数在您的第二次通话中(目标的所需大小作为源的长度)。你需要改变

int bytesWritten = WideCharToMultiByte(932, 0, value, sizeRequired, buffer, 100,
NULL, NULL);

int bytesWritten = WideCharToMultiByte(932, 0, value, -1, buffer, sizeRequired,
NULL, NULL);

关于c++ - WideCharToMultiByte - 对于 Shift-JIS 代码页,所需的大小和写入的字节数不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com