C++ 如何将选择从无符号字符缓冲区复制到另一个变量并转换为int?

C++ 如何将选择从无符号字符缓冲区复制到另一个变量并转换为int?,c++,buffer,endianness,C++,Buffer,Endianness,我有一个未签名的字符缓冲区,它正在被读取,并且工作正常。 我需要能够在主缓冲区内选择一些位,并将它们复制到另一个变量,以将十六进制数据(小端)转换为要显示的整数。我这辈子都不能让它工作。下面的代码以十六进制打印我需要的值(由于endianness的原因,以相反的顺序),但我不知道如何使用它 void printFromBuffer(unsigned char *buffer, int block, int offset, int size){ unsigned char *ptr = b

我有一个未签名的字符缓冲区,它正在被读取,并且工作正常。 我需要能够在主缓冲区内选择一些位,并将它们复制到另一个变量,以将十六进制数据(小端)转换为要显示的整数。我这辈子都不能让它工作。下面的代码以十六进制打印我需要的值(由于endianness的原因,以相反的顺序),但我不知道如何使用它

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,你需要一个累加器。