Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中将整数转换为十六进制无符号字符数组+;_C++_Integer_Hex_Unsigned Char - Fatal编程技术网

C++ 在C+中将整数转换为十六进制无符号字符数组+;

C++ 在C+中将整数转换为十六进制无符号字符数组+;,c++,integer,hex,unsigned-char,C++,Integer,Hex,Unsigned Char,我需要将整数int参数转换为十六进制无符号字符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_

我需要将整数
int参数
转换为十六进制无符号字符
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;
int参数;
std::stringstream-ss;
无符号字符缓冲区[];

ss问题1:
缓冲区在代码段中的大小不确定。我想你已经申报了足够大的尺寸

问题2:转换的结果将是几个字符(由于
0x
前缀,至少有3个字符)。所以你需要把它们都复制下来。除非您有字符串,否则这将不适用于
=

问题3:中间转换不会成功:您不能希望将复杂的stringstream对象转换为单个无符号字符。幸运的是,你不需要这个

下面是一个可能的解决方案,使用并向缓冲区添加空终止符:

const string& s = ss.str();
*copy(s.cbegin(), s.cend(), buffer)='\0'; 

咨询我的灵能,它读到你实际上想要在字节的表示中看到一个
int
值(
byte\u t
)。嗯,从你的评论来看

我想要用十六进制表示并分配给无符号字符缓冲区[n]的相同数字

没有太多的精神力量,但你应该注意十六进制表示是一个格式问题,而不是内部整数表示

最简单的方法是使用
联合体

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] << ' ';
}
Int32Bytes x;
x、 ival=参数;
对于(size_t i=0;istd::cout-FYI:unsigned char仅仅是一个字符。您的措辞非常混乱。数字不是十六进制。
10
0xa
表示相同的数字。如果您想要一个十六进制表示为10的字符,那将是
'a'
。是的,我想要十六进制和assi表示相同的数字gned到一个无符号字符缓冲区[n]。追加“0x”是为了显示基,这是一项要求。知道怎么做吗?
byte_t b=static_cast(ss);
完全没有意义。你想用
union Int32Bytes{int ival;byte_t bytes[4];}我知道它是C++,但我仍然感觉到用哑<代码> SNPROTNF(缓冲区,siZOF(缓冲器),“0x%08x”,参数)< /C> >完成这个原始任务的冲动。将缓冲区的类型从<代码>未签名CHAR[] /代码>改为<代码> char []/COD>。确保缓冲区足够大(至少11字节)。如果您需要大写十六进制数字,请将格式字符串中的
%08x
替换为
%08x
。根据系统的尾端,您不会得到
0x0 0x0 0xa
0xa 0x0 0x0 0x0