请求个小问题,实在是搞不清楚了 如题:
char len_array[] = {'\15', '\0', '\0', '\0'};
int *len_p = (int *) len_array;
int len = *len_p;
printf("%d\n", len);
结果为什么是 13 呢?
1
firebroo 2019-05-09 16:50:03 +08:00 4
因为 8 进制。。
|
2
SeaRecluse 2019-05-09 16:56:14 +08:00
int('\15') = 13
不过我也不知道为啥 强制转换之后输出应该是 13,0,0,0 才对吧 为何我输出: 13 0 1925797100 9697452 |
4
SeaRecluse 2019-05-09 16:58:46 +08:00
不知道是不是因为第一个\0 已经结束了字符,后面俩成野地址了
|
5
ZgblKylin 2019-05-09 16:59:09 +08:00
https://en.wikipedia.org/wiki/String_literal#Escape_sequences
转义符号\不是这么用的。 你要存数字就直接写数字 15。 转移符号\后面跟数字时,只有两种写法,一种是直接跟八进制数字,一种是\x 跟十六进制数字。 你这里写的\15,那就是八进制 15,也就是十进制 13 |
6
xinglp 2019-05-09 17:01:41 +08:00 via Android
要考虑大小端吧
|
7
besto 2019-05-09 17:03:58 +08:00
@SeaRecluse int 和 char 的长度不一样, 如果一个 int 4 字节, char 1 字节, 那么仅有 13 是有效的(这一点还要在 little endian 的情况下).
|
8
leye OP @SeaRecluse 确实是我忽略了八进制的转义符号导致的,我的电脑上 int 是 4 个字节,c 是从低到高写的,所以是
00001101 00000000 00000000 00000000 所以就是 13 了 |
9
leye OP 对的还有大小端
|
11
across 2019-05-09 17:13:44 +08:00
是考转移字符和内存排布吧。
上面其实说完了。 4byte 的内存,用 char 方式写入数据,然后以 int 方式读取。 |
12
PTLin 2019-05-09 17:27:21 +08:00
https://s2.ax1x.com/2019/05/09/EgyILn.png
你的机器应该是小端法的,最低有效字节排在最前面。 |
14
wheeler 2019-05-09 20:51:15 +08:00
|
15
luozic 2019-05-09 20:53:04 +08:00 via iPhone
大小端和进制问题 还是很重要的
|