当我尝试将十六进制的一个字节转换为char字符串时,我发现它需要3个字节。我正在使用Visual Studio 2013。
如果我的字节少于3个字节,则会出现错误:"堆栈变量' str'已经腐败了。"
我做错了什么?当然,十六进制值0xF1应该适合char str[1]
?为什么我必须声明一个3字节数组来分配一个1字节的值?
char str[3];
sprintf(str, "%02X", 0xF1);
str
的内容是0x0026fd18" F1"
答案 0 :(得分:1)
问题在于试图打印" F1"进入字符串后跟一个空终止符 - 这将是三个字节。这是sprintf函数的重点 - 它将输入格式化为可读字符串。如果你试图简单地将十六进制值0xF1分配给一个char,你可以这样做:
char str = (char)0xF1