我有一个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);
由于
答案 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");