如何sprintf一个unsigned char?

时间:2010-01-12 16:20:30

标签: c++ printf unsigned-char

这不起作用:

unsigned char foo;
foo = 0x123;

sprintf("the unsigned value is:%c",foo);

我收到此错误:

  

无法转换参数2   'unsigned char'到'char'

5 个答案:

答案 0 :(得分:35)

在你看看导致问题的无符号字符之前,请仔细看看这一行:

sprintf("the unsigned value is:%c",foo);

sprintf的第一个参数始终是要打印值的字符串。该行应该类似于:

sprintf(str, "the unsigned value is:%c",foo);

除非你的意思是printf而不是sprintf。

修复后,您可以在格式字符串中使用%u来打印出无符号类型的值。

答案 1 :(得分:18)

使用printf()格式字符串%u

printf("%u", 'c');

答案 2 :(得分:6)

修改

snprintf更安全一些。由开发人员来确保使用正确的缓冲区大小。

试试这个:

char p[255]; // example
unsigned char *foo;
...
foo[0] = 0x123;
...
snprintf(p, sizeof(p), " 0x%X ", (unsigned char)foo[0]);

答案 3 :(得分:3)

我认为你对sprintf的工作方式感到困惑。第一个参数是字符串缓冲区,第二个是格式化字符串,然后是要输出的变量。

答案 4 :(得分:1)

您不应该使用sprintf,因为它很容易导致缓冲区溢出。

您应该更喜欢snprintf(或使用Microsoft标准C库编程时使用_snprintf)。如果已在本地函数中在堆栈上分配了缓冲区,则可以执行以下操作:

char buffer[SIZE];
snprintf(buffer, sizeof(buffer), "...fmt string...", parameters);

数据可能会被截断,但这绝对比溢出缓冲区更好。