Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 不寻常的字符串格式_C++_C - Fatal编程技术网

C++ 不寻常的字符串格式

C++ 不寻常的字符串格式,c++,c,C++,C,我有这样的代码: int value = 65536; CString output = TEXT(""); output.Format(TEXT("%X"), value); 打印输出给我:10000 我需要这样的输出:0001.0000 可能吗 打印输出给我:10000 %X格式字符串按预期工作 我需要这样的输出:0001.0000 如果我可能会问,使用浮点十进制表示有什么意义?之所以使用十六进制,是因为它直接转换为二进制,否则就没有意义了 但无论如何,如果您确实需要,则的格式字符串与的

我有这样的代码:

int value = 65536;

CString output = TEXT("");
output.Format(TEXT("%X"), value);
打印输出给我:10000

我需要这样的输出:0001.0000

可能吗

打印输出给我:10000

%X格式字符串按预期工作

我需要这样的输出:0001.0000

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

但无论如何,如果您确实需要,则的格式字符串与的相同:

%十六进制浮点,大写


因此,将%F替换为%A,并将变量转换为浮点数它应该可以做到这一点

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

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屏蔽所有其他位 字节3-4:向左移动16字节1-2。不适合您的情况,但请确保只打印这些字节的值来屏蔽所有其他位。 您的代码可以是:

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

您正在打印的十六进制值为65536,正确显示为0x10000。为什么要打印0001.0000?您想要打印的格式的规则是什么?@storojs72您应该阅读格式说明符。打印的位数可以由精度参数指定。此外,如果确实需要用一个点分隔数字,则必须将数字分为低部分和高部分。@naffarn我从硬件得到的响应是,固件版本为0001.0000。我需要通知用户使用%04X.%04X并将数字分成两部分?C99中新增了%a格式说明符。它以十六进制形式打印浮点数。这不是OP想要的,那又怎样?。OP询问打印的方法我假设是十六进制的浮点数,这是%a所做的。您可以使用HIWORD和LOWORD宏,而不是手动位移位。您应该使用%.4hu而不是%.4X:output.FormatTEXT%.4hu.%.4hu,HIWORDvalue,LOWORDvalue;但是,我想知道,为什么要将版本号显示为0001.0000,而不是更人性化的1.0?output.FormatTEXT%hu.%hu,HIWORDvalue,LOWORDvalue;