异常的CString格式

Unusual CString formatting

本文关键字:格式 CString 异常      更新时间:2023-10-16

我的代码是:

int value = 65536;
CString output = TEXT("");
output.Format(TEXT("%X"), value);

打印output得到:10000

我需要这样的输出:0001.0000

有可能吗?

我似乎找到了答案:

output.Format(TEXT("%.4X.%.4X"), (value >> 16) & 0xffff, value & 0xffff);

你必须保留你不想要的字节,并留下所有其他的。

假设int在你的平台上是32位,你有:

Byte         4           3           2           1
Binary | 0000 0000 | 0000 0000 | 0000 0001 | 0000 0000 |
Hex         0x00        0x01        0x00        0x00

你想要的是隔离字节1-2和字节3-4

  • 字节1-2:使用0x0000FFFF或0xFFFF简单地屏蔽所有其他位
  • Byte 3-4:向左移动16个字节的字节1-2。这不是你的情况,但要确保只打印这些字节的值,掩盖所有其他位。

你的代码可以是:

output.Format(TEXT("%04X.%04X"), (value >> 16) & 0xFFFF, (value & 0xFFFF));

打印输出给我:10000

"%X"格式字符串正常工作。

我需要这样的输出:0001.0000

如果我可以问,使用浮点十进制表示的意义是什么?使用十六进制是因为它可以直接转换为二进制,否则使用它就没有意义了。

但是无论如何,如果你真的需要它,CString::format()的格式化字符串与printf()的:

相同

%A十六进制浮点数,大写

所以将%F替换为%A,并将变量转换为浮点数,这样就可以了!