C:从闪存地址读取128位值

C:从闪存地址读取128位值,c,C,我想在内存中读取一个特定的128位值,该值等于以下值: 128 bit val = 0171EC07F2E6C383FFFFFFFFFFFFFFFF 此id在刷新二进制文件时可见 Read Intel HEX application image with 608 bytes. Received autobaud response: Product ID: xxxxxx Revision: xxx Serial number: 0171EC07F2E6C3

我想在内存中读取一个特定的128位值,该值等于以下值:

128 bit val = 0171EC07F2E6C383FFFFFFFFFFFFFFFF
此id在刷新二进制文件时可见

Read Intel HEX application image with 608 bytes.
  Received autobaud response:
    Product ID: xxxxxx      
    Revision: xxx
    Serial number: 0171EC07F2E6C383FFFFFFFFFFFFFFFF
    User code present.
    User code checksum failed.
    Write protection disabled.
    Read protection disabled.
  Download completed.
  Run command sent.
Programming flash image.
  Read Intel HEX flash image with 189248 bytes.
  Autobaud succeeded.
  Flash completed.
这是我用来读取地址的代码

uint8_t *address = (uint8_t *)0x34576;
uint8_t reg[16] = {0};
for (int i = 0; i < 16; i++) {
    reg[i] = *address;
    printf("reg[%d]= 0x%x\r\n", i, reg[i]);
    *address++;
}

从输出中可以看出,字节顺序混淆了。这是因为little/big endian。如何将值转换为等于
128位val

您是正确的;这是因为。您可以交换字节(03和12),也可以一次读取一个字节的输入。还有其他错误-每个字节中的半字节也是错误的上升方向:(
0x34576
似乎没有与4字节边界对齐。这在某些体系结构上是个问题。可能最好一次构造一个字节的数组。驻留在
中的数据(uint8_t*))0x34576
不是0171EC07F2E6C383FFFFFFFFFFFFFF。未列出的代码需要检查。张贴预期数据为0171EC0的证据……这是一个小/大的尾端半字节问题。“序列号”不是一个
uint128\u t
,但使用了不同的布局。读取时使用简单的反向半字节。更多地将其视为十六进制字符的压缩数组。在我看来,这似乎是报告序列号的工具中的一个弱点。
reg[0]= 0x10
reg[1]= 0x17
reg[2]= 0xce
reg[3]= 0x70
reg[4]= 0x2f
reg[5]= 0x6e
reg[6]= 0x3c
reg[7]= 0x38
reg[8]= 0xff
reg[9]= 0xff
reg[10]= 0xff
reg[11]= 0xff
reg[12]= 0xff
reg[13]= 0xff
reg[14]= 0xff
reg[15]= 0xff