我在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:�:�:
有人知道该怎么做吗?
您需要将其强制转换为`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
如果这些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]);
中的某些工具。
不强制转换为<iomanip>
,而是整数。