[c ++ std :: cout以十六进制表示

问题描述 投票:0回答:3

我在C ++中有一个带有printf的输出语句,看起来像这样:

for(int i=0; i<6; i++)
        printf("%.2X", (unsigned char) iter->hwaddress[i]);

我需要使用std::cout进行输出,我试图这样做:

for(int i=0; i<6; i++)
   cout << hex << (unsigned char) iter->hwaddress[i];

但是那给了我:

  �:�:w:�:�:

有人知道该怎么做吗?

c++ hex output
3个回答
7
投票

您需要将其强制转换为`int:

char c = 15;
cout << hex << setfill('0') << setw(2) << static_cast<int>(c); // prints "0f"

hex仅影响整数I / O,[I / O]不被视为-的一部分,因此您的代码最终仍会输出实际的char

请注意,如果对char进行了签名,并且需要使用它来处理大于char的值,则必须先将其强制转换为0x7f,然后强制转换为unsigned char

unsigned int

1
投票

如果这些cout << hex << setfill('0') << setw(2) << static_cast<unsigned int>(static_cast<unsigned char>(c)); 的值是硬件地址,为什么不将它们重新映射为实际的指针?然后,iter->hwaddress[i]将以十六进制形式打印它们。

cout

尚不清楚您是否需要固定位数。这可能需要cout << reinterpret_cast<void*>(iter->hwaddress[i]); 中的某些工具。


0
投票

不强制转换为<iomanip>,而是整数。

© www.soinside.com 2019 - 2024. All rights reserved.