【发布时间】:2015-12-02 10:04:05
【问题描述】:
我需要将整数int parameter 转换为十六进制无符号字符buffer[n]。
如果整数是例如 10,那么十六进制无符号字符数组应该是 0x0A
为此,我有以下代码:
int parameter;
std::stringstream ss;
unsigned char buffer[];
ss << std::hex << std::showbase << parameter;
typedef unsigned char byte_t;
byte_t b = static_cast<byte_t>(ss); //ERROR: invalid static_cast from type ‘std::stringstream {aka std::basic_stringstream<char>}’ to type ‘byte_t {aka unsigned char}’
buffer[0]=b;
有谁知道如何避免这个错误?
如果有一种方法可以将整数参数转换为十六进制无符号字符,而不是先做:ss << std::hex << std::showbase << parameter;,那就更好了。
【问题讨论】:
-
仅供参考:无符号字符只是一个字符。你的措辞很混乱。
-
数字不是十六进制的。
10和0xa代表相同的数字。如果你想要一个十进制表示的字符,那就是'a'。 -
是的,我想要以十六进制表示的相同数字并分配给无符号字符缓冲区[n]。附加“0x”是为了显示基础,这是一个要求。知道怎么做吗?
-
byte_t b = static_cast<byte_t>(ss);完全没有意义。你真的想要union Int32Bytes { int ival; byte_t bytes[4]; };这样的东西吗? -
我知道它是 C++,但我仍然想用愚蠢的
snprintf(buffer, sizeof(buffer), "0x%08x", parameter)完成这项原始任务。将缓冲区类型从unsigned char[]更改为char[]。确保缓冲区足够大(至少 11 个字节)。如果您想要大写十六进制数字,请将格式字符串中的%08x替换为%08X。
标签: c++ integer hex unsigned-char