BlackHoleMax

BlackHole's Blog

马上订阅 BlackHoleMax RSS 更新: https://blackholemax.github.io/atom.xml

C语言学习(long和char强制类型转换)

2024年10月14日 19:49

C语言学习(long和char强制类型转换)

在不同的计算机架构中,数据的存储方式可能不同。大端(Big-endian)和小端(Little-endian)是两种常见的字节序。在大端系统中,数据的高位字节存储在内存的低地址端,在小端系统中,数据的低位字节存储在内存的低地址端。由于long类型通常占用4字节(32位,linux64下占用八字节,不影响本文通用性),而char类型占用1字节(8位),在强制转换时,只有long的最低8位会被转换为char。这意味着除了最低8位之外的其他位将被丢弃。如果long类型的值是负数,那么在转换为char时,符号位会被扩展。在大多数情况下,这会导致char类型的值变成一个负数,但由于char类型通常以无符号数处理,所以这个负数会被解释为一个正数。

示例如何将long类型转换为char类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>

int main() {
long l = 0x12345678L; // 一个示例的long值
char c;

// 强制类型转换,只取l的最低8位
c = (char)l;

// 打印结果
printf("The long value: 0x%lX\n", l); // long十六进制输出
printf("The char value: 0x%X\n",
c); // 格式化char打印x,在 ASCII 编码中,字符 x 的十进制值是
// 120,十六进制值是 0x78,在小端系统中的最低字节就是0x78
printf("The char(char) value: %c\n",
c); // 强转后的char格式化输出,即十六进制数0x78的ASCII编码
printf("The char(int) value: %d\n"...

剩余内容已隐藏

查看完整文章以阅读更多