c++;十六进制格式的std::cout 我在C++中有一个输出语句,它是代码> Prtff,看起来是这样的: for(int i=0; i<6; i++) printf("%.2X", (unsigned char) iter->hwaddress[i]); for(int i=0; i<6; i++) cout << hex << (unsigned char) iter->hwaddress[i];
但这给了我:c++;十六进制格式的std::cout 我在C++中有一个输出语句,它是代码> Prtff,看起来是这样的: for(int i=0; i<6; i++) printf("%.2X", (unsigned char) iter->hwaddress[i]); for(int i=0; i<6; i++) cout << hex << (unsigned char) iter->hwaddress[i];,c++,hex,output,C++,Hex,Output,但这给了我: �:�:w:�:�: 有人知道怎么做吗?您需要将其转换为'int: char c = 15; cout << hex << setfill('0') << setw(2) << static_cast<int>(c); // prints "0f" 不要强制转换为无符号字符,而是转换为整数 #include <iostream> #include <iomanip> #include <
�:�:w:�:�:
有人知道怎么做吗?您需要将其转换为'int:
char c = 15;
cout << hex << setfill('0') << setw(2) << static_cast<int>(c); // prints "0f"
不要强制转换为
无符号字符,而是转换为整数
#include <iostream>
#include <iomanip>
#include <cstdio>
int
main()
{
char numbers[] = {1, 2, 3, 4, 5, 6};
// Using C-style printf:
for (int i = 0; i < 6; i++)
std::printf("%02X", static_cast<unsigned>(numbers[i]));
printf("\n");
// Using C++ streams:
for (int i = 0; i < 6; i++)
std::cout << std::hex << std::setw(2) << std::setfill('0')
<< static_cast<unsigned>(numbers[i]);
std::cout << std::endl;
}
#包括
#包括
#包括
int
main()
{
字符数[]={1,2,3,4,5,6};
//使用C-style printf:
对于(int i=0;i<6;i++)
标准::printf(“%02X”,静态_-cast(数字[i]);
printf(“\n”);
//使用C++流:
对于(int i=0;i<6;i++)
std::cout如果那些iter->hwaddress[i]
的值是硬件地址,为什么不(重新解释)将它们转换为实际指针?那么cout
将以十六进制打印它们,而无需任何额外的努力
cout << reinterpret_cast<void*>(iter->hwaddress[i]);
couthwaddress[i]);
不清楚您是否需要固定的位数。这可能需要使用
中的一些工具。如果char
是有符号的,而c
是负数,这将产生比OP预期的更长的结果(并且转换为无符号的
没有帮助)。您将不得不走一条看起来很尴尬的路线,使用静态转换(static_cast(c))
以避免符号扩展。
cout << reinterpret_cast<void*>(iter->hwaddress[i]);