objective-c - 为什么这个 uint32_t 在内存中是这样排序的?

标签 objective-c c

我正在学习字节顺序,我读到英特尔处理器通常是小端。我在 Intel Mac 上,我想我会亲自尝试一下,看看它的实际效果。我定义了一个 uint32_t,然后尝试按内存中的顺序打印出 4 个字节。

uint32_t integer = 1027;
uint8_t * bytes = (uint8_t*)&integer;
printf("%04x\n", integer);
printf("%x%x%x%x\n", bytes[0], bytes[1], bytes[2], bytes[3]);

输出:

0403
3400

我希望以相反的顺序 (3040) 或不变的方式看到字节,但输出的两者都不是。我错过了什么?

我实际上使用 Xcode 将其编译为 Objective-C,如果这有任何区别的话。

最佳答案

因为在当今典型的计算机中,保存数据是以字节(8 位)为单位进行的。

在使用小端的机器上,第一个字节是03,第二个字节是04,第三个和第四个字节是00.

第二行第一个数字3代表第一个字节,第二个数字4代表第二个字节。要显示每个字节有 2 位数字的字节,请指定要以如下格式打印的宽度

printf("%02x%02x%02x%02x\n", bytes[0], bytes[1], bytes[2], bytes[3]);

关于objective-c - 为什么这个 uint32_t 在内存中是这样排序的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39181802/

相关文章:

objective-c - 如何使用 Xcode 输出来确定崩溃源?

objective-c - 如何从GDataEntryYouTubeVideo获取YouTube视频ID?

ios - 在 NSMutableArray 的第 0 个索引处添加数据

ios - 如何在 Windows 上使用 Objective C 进行编码?

iphone - 从类方法中调用其他类的实例方法? ( objective-c )

c - 为什么使用凯撒密码加密时无法打印空格?

c - C 中的变量定义忽略

c - 只需双击即可运行使用 MSYS2 构建的 GTK+ 应用程序

C++ 预处理器——连接参数

c - 快板显示奇怪的腐败视觉效果