以printf在C ++中的方式转换unsigned char

时间:2012-09-10 16:14:10

标签: c++ hex printf

我想要转换为十六进制的unsigned char。我知道printf("%02X", char)给了我想要的输出,但它被发送到终端,因此没用。如何将字符转换为十六进制并将其以与printf相同的方式存储在变量中?

4 个答案:

答案 0 :(得分:6)

如下:

stringstream ss;
ss << std::hex << std::setw(2) << (unsigned int) x;

cout << ss.str() << endl;

您可能想稍微调整一下stringstream

答案 1 :(得分:3)

使用sprintf代替缓冲区,例如

char str[50];
sprintf(str, "%X02", char);

答案 2 :(得分:2)

也许是最快的一个?

struct hex_uchar {
   hex_uchar(unsigned char c)
   {
      value[0] = hc[c >> 4];
      value[1] = hc[c & 0xF];
      value[2] = '\0';
   }
   char value[3];
   static char hc[16];
};
char hex_uchar::hc[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
                           'A', 'B', 'C', 'D', 'E', 'F' }; 


int main() {
   std::cout << hex_uchar('A').value << std::endl;
}

答案 3 :(得分:1)

注意:您没有将其转换为十六进制值,而是转换为以空字符结尾的字符串。将它存储在模型的变量中是一种废话。