如何将选择从unsigned char缓冲区复制到另一个变量并转换为int?

时间:2013-08-10 11:17:07

标签: c++ buffer endianness

我有一个unsigned char缓冲区,正在读入并正常工作。 我需要能够在主缓冲区中选择多个位并将它们复制到另一个变量,以便将十六进制数据(小端)转换为要显示的整数。我不能为我的生活得到这个工作。下面的代码以十六进制形式打印我需要的值(由于字节序以相反的顺序),但我无法弄清楚如何使用它。

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);

由于

1 个答案:

答案 0 :(得分:0)

好的,这段代码有效,但我怀疑这是最有效的方法。如果其他人可以清理它以防止将来效率低下,那么请继续。

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");