c++ - 整数如何存储在内存中?

标签 c++ endianness

当我阅读一篇关于 Big/Little Endian 的文章时,我很困惑。

代码如下:

#include <iostream>
using namespace std;

int i = 12345678;

int main()
{
    char *p = (char*)&i;  //line-1

    if(*p == 78)  //line-2
        cout << "little endian" << endl;
    if(*p == 12)
        cout << "big endian" << endl;

}

问题:

  1. 在第 1 行中,我可以使用 static_cast<char*>(&i) 进行转换吗?

  2. 在第2行,根据代码,如果是little-endian,则78存储在最低字节,否则12存储在最低字节。但我的想法是,i = 12345678; 会以二进制形式存储在内存中。

    如果是little-endian,那么i的二进制文件的最后一个字节会存储在最低字节,但是我不明白的是它怎么保证i的最后一个字节是78

    就好比,如果 i = 123; ,那么 i 的二进制就是 01111011 ,能不能保证在little-endian中,23存放在最低字节?

最佳答案

  1. 我更喜欢 reinterpret_cast

  2. 小端和大端指的是字节,即 8 位数量,存储在内存中的方式,不是两位小数。如果 i 的值为 0x12345678,那么您可以检查 0x780x12 以确定字节顺序,因为两个十六进制数字对应于一个字节(在我为其编程的所有硬件上)。

关于c++ - 整数如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7499423/

相关文章:

C++ 执行外部进程

c++ - 模板类型推导如何使用重载函数作为参数

c - 使用二进制(十六进制)文件中的 fread 交换字节

c - 大端字节数组到 C、arm 中的小端结构元素

c - bind() 的 struct sockaddr_in 成员字节顺序

c++ - boost::endian 和非 1 字节原子字节顺序?

c++ - C++类中的变量返回类型

c++ - Munmap_chunk() 错误,无法理解指针行为

c++ - 如何调整 Eclipse 的 C++ 索引器?

c# - 如何将整数写入右侧低位的文本文件(Bigendian)