[英]Converting an integer to an hexadecimal unsigned char array in C++
我需要将整数int parameter
转换为十六进制 unsigned char 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;
: ss << std::hex << std::showbase << parameter;
那会更好。
咨询我的精神力量它读到你实际上想要在它的字节表示中看到一个int
值( byte_t
)。 好吧,根据你的评论
我想要以十六进制表示并分配给无符号字符缓冲区 [n] 的相同数字。
没有那么多的精神力量,但你应该注意十六进制表示是格式问题,而不是内部整数表示。
最简单的方法是使用像这样的union
union Int32Bytes {
int ival;
byte_t bytes[sizeof(int)];
};
并像使用它一样
Int32Bytes x;
x.ival = parameter;
for(size_t i = 0; i < sizeof(int); ++i) {
std::cout << std::hex << std::showbase << (int)x.bytes[i] << ' ';
}
请注意,由于当前 CPU 体系结构的字节顺序特性,会出现意外结果。
问题 1:您的代码段中的buffer
大小不确定。 我假设您已经声明了足够的大小。
问题 2:转换的结果将是几个字符(由于0x
前缀,至少 3 个字符)。 所以你需要复制所有这些。 除非您有字符串,否则这不适用于=
。
问题 3:您的中间转换不会成功:您不能希望将复杂的 stringstream 对象转换为单个无符号字符。 幸运的是,你不需要这个。
这是使用std::copy()
并向缓冲区添加空终止符的可能解决方案:
const string& s = ss.str();
*copy(s.cbegin(), s.cend(), buffer)='\0';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.