C++ 如何将选择从无符号字符缓冲区复制到另一个变量并转换为int?
我有一个未签名的字符缓冲区,它正在被读取,并且工作正常。 我需要能够在主缓冲区内选择一些位,并将它们复制到另一个变量,以将十六进制数据(小端)转换为要显示的整数。我这辈子都不能让它工作。下面的代码以十六进制打印我需要的值(由于endianness的原因,以相反的顺序),但我不知道如何使用它C++ 如何将选择从无符号字符缓冲区复制到另一个变量并转换为int?,c++,buffer,endianness,C++,Buffer,Endianness,我有一个未签名的字符缓冲区,它正在被读取,并且工作正常。 我需要能够在主缓冲区内选择一些位,并将它们复制到另一个变量,以将十六进制数据(小端)转换为要显示的整数。我这辈子都不能让它工作。下面的代码以十六进制打印我需要的值(由于endianness的原因,以相反的顺序),但我不知道如何使用它 void printFromBuffer(unsigned char *buffer, int block, int offset, int size){ unsigned char *ptr = b
void printFromBuffer(unsigned char *buffer, int block, int offset, int size){
unsigned char *ptr = buffer;
ptr += block * 0x10 + offset;
for(int i=0;i<size;i++){
printf("%X \n",ptr[i]);
}
}
printFromBuffer(buffer, 0x08, 0x03, 0x02);
void printFromBuffer(无符号字符*缓冲区、int块、int偏移量、int大小){
无符号字符*ptr=缓冲区;
ptr+=块*0x10+偏移量;
对于(int i=0;i好的,这段代码是有效的,但我怀疑这是最有效的方法。如果其他人可以清理这段代码以防止将来效率低下,请继续
void printFromBuffer(unsigned char *buffer, int block, int offset, int size, string attribute){
unsigned char *ptr = buffer;
char p[255];
string contents = "";
unsigned int x;
std::stringstream ss;
ptr += block * 0x10 + offset;
for(int i=size;i--;){
sprintf_s(p,"%02X",ptr[i]);
contents += p;
}
ss << std::hex << contents;
ss >> x;
cout << attribute << ": " << x;
printf("\n");
}
printFromBuffer(buffer, 0x08, 0x03, 0x02, "Serial");
void printFromBuffer(无符号字符*缓冲区、整型块、整型偏移量、整型大小、字符串属性){
无符号字符*ptr=缓冲区;
charp[255];
字符串内容=”;
无符号整数x;
std::stringstream-ss;
ptr+=块*0x10+偏移量;
对于(int i=大小;i--;){
sprintf_s(p,“%02X”,ptr[i]);
含量+=p;
}
ssx;
cout缓冲区中的每个“块”都是16字节宽(即128位数字)?在我看来,如果转换函数只使用缓冲区和字节偏移量,并且让调用方负责执行块对齐,那么这将更容易理解,至少在您更好地理解转换端之前是这样的.此外,如果你想让它反转字节,从而得到一个真正的系统int,你需要一个累加器。