不寻常的CString格式

时间:2016-08-11 05:36:10

标签: c++ c

我有这样的代码:

int value = 65536;

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

打印output给了我:10000

我需要这样的输出:0001.0000

有可能吗?

3 个答案:

答案 0 :(得分:0)

在我看来,我找到了答案:

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

答案 1 :(得分:0)

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

假设你的平台上的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
  • 简单地屏蔽所有其他位
  • 字节3-4:向左移动16个字节的字节1-2。不是你的情况,但要确保只打印那些字节的值,掩盖所有其他位。

您的代码可以是:

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

答案 2 :(得分:-1)

  

打印输出给我:10000

"%X"格式字符串的工作方式与预期一致。

  

我需要这样的输出:0001.0000

如果我可能会问,使用浮点十进制表示的重点是什么?使用十六进制是因为它直接转换为二进制,否则没有必要使用它。

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

  

%十六进制浮点,大写

所以用%A替换%F并将你的变量转换为浮点数就可以了!#/ p>