【问题标题】:storing integer value in reverse order以相反的顺序存储整数值
【发布时间】:2014-02-06 01:39:25
【问题描述】:

在打印十六进制值(存储在a中的值)时以reverse order打印,

int main()
{
    int i;
    uint8_t b[4];
    int a = 0xaabbccdd;
    uint8_t *ptr;
    ptr = &b;
    memcpy(ptr,&a,4 * sizeof(uint8_t));

    for(i = 0;i < 4;i++)
    {
        printf("%x  ",*ptr++);
    }
    return(0);

}

输出

dd  cc  bb  aa

如何以我作为输入给出的相同顺序存储它(aabbccdd

【问题讨论】:

标签: c++ c pointers memory memcpy


【解决方案1】:

这与ENDIANNESS有关,它是计算机在内存中存储数值的方式。

总而言之,大多数现代处理器(x86、x86-64、ARM)都是 little-endian(ARM 现在是 bi-endian,您可以在硬件中进行配置)。

这意味着最低有效字节具有最低地址(小端在前)。

如果你真的需要,我建议你解决它,而不是试图反对这一点。

如果您真的必须这样做,您可以做的一件事是使用网络字节顺序,即定义为大端。 htons(), htonl(), ntohs(), ntohl() 之类的函数可能会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 2013-05-11
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多