【发布时间】:2025-12-21 08:50:07
【问题描述】:
'1' 使用两个字节 20 和 0; '2' 使用两个字节 21 和 0;
'a' 使用两个字节 68 和 0; 'b' 使用两个字节 69 和 0;
我从 GDI32.dll(windowsapi) 挂钩 func ExtTextOutW ,并从 str(unsigned char) 读取; 比如abc123... while got:68 0 69 0 70 0 20 0 21 0...;
BOOL ExtTextOutW
(
HDC hdc,
INT x,
INT y,
UINT flags,
const RECT* lprect,
LPCWSTR str,
UINT count,
const INT* lpDx
)
【问题讨论】:
-
欢迎来到 Stack Overflow。请阅读the help pages、the SO tour、阅读how to ask good questions,以及this question checklist。最后,你真正想问的是什么?你有什么问题? “'1' 使用两个字节 20 和 0;'2' 使用两个字节 21 和 0;”是什么意思?等等?
-
那是UTF-16little-endian,这是Windows内部使用的。除了额外的 0 之外,这些示例与 ASCII 的代码点相同。
-
我知道 LPCWSTR;如果它是 UTF-16 编码,字符 'a' 同时由两个字节 0 和 97 编码,但这个使用 68 和 0;所以我认为它是不兼容的 ASCII;
-
str(unsigned char) 表示我将其读取为 unsigned char;因为当我通过 UTF16\utf32\GBK 读取 str 时失败。
-
糟糕,抱歉,是的 - 乍一看,它们看起来就像十六进制一样。我猜它可能是一种字体,其中字符已重新映射到其他代码点,但这很奇怪。
标签: c encoding wchar-t lpcwstr