【发布时间】:2013-08-10 11:17:06
【问题描述】:
我有一个 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);
谢谢
【问题讨论】:
-
缓冲区中的每个“块”是否为 16 字节宽(即这些是 128 位数字)?在我看来,如果转换函数只使用一个缓冲区和字节偏移量,并让 caller 负责执行块对齐(至少最初直到您更了解转换方面)。此外,如果您希望它反转字节以便获得真正的系统整数,则需要一个累加器。
标签: c++ buffer endianness