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]);