V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leye
V2EX  ›  C

请教各位一个问题,拜托。

  •  
  •   leye · 2019-05-09 16:34:19 +08:00 · 2768 次点击
    这是一个创建于 2017 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请求个小问题,实在是搞不清楚了 如题:

    char len_array[] = {'\15', '\0', '\0', '\0'};
    int *len_p = (int *) len_array;
    int len = *len_p;
    printf("%d\n", len);
    

    结果为什么是 13 呢?

    17 条回复    2019-05-10 06:19:32 +08:00
    firebroo
        1
    firebroo  
       2019-05-09 16:50:03 +08:00   ❤️ 4
    因为 8 进制。。
    SeaRecluse
        2
    SeaRecluse  
       2019-05-09 16:56:14 +08:00
    int('\15') = 13
    不过我也不知道为啥
    强制转换之后输出应该是 13,0,0,0 才对吧
    为何我输出:
    13
    0
    1925797100
    9697452
    leye
        3
    leye  
    OP
       2019-05-09 16:56:20 +08:00
    @firebroo 多谢多谢
    SeaRecluse
        4
    SeaRecluse  
       2019-05-09 16:58:46 +08:00
    不知道是不是因为第一个\0 已经结束了字符,后面俩成野地址了
    ZgblKylin
        5
    ZgblKylin  
       2019-05-09 16:59:09 +08:00
    https://en.wikipedia.org/wiki/String_literal#Escape_sequences

    转义符号\不是这么用的。
    你要存数字就直接写数字 15。

    转移符号\后面跟数字时,只有两种写法,一种是直接跟八进制数字,一种是\x 跟十六进制数字。
    你这里写的\15,那就是八进制 15,也就是十进制 13
    xinglp
        6
    xinglp  
       2019-05-09 17:01:41 +08:00 via Android
    要考虑大小端吧
    besto
        7
    besto  
       2019-05-09 17:03:58 +08:00
    @SeaRecluse int 和 char 的长度不一样, 如果一个 int 4 字节, char 1 字节, 那么仅有 13 是有效的(这一点还要在 little endian 的情况下).
    leye
        8
    leye  
    OP
       2019-05-09 17:09:52 +08:00
    @SeaRecluse 确实是我忽略了八进制的转义符号导致的,我的电脑上 int 是 4 个字节,c 是从低到高写的,所以是
    00001101 00000000 00000000 00000000 所以就是 13 了
    leye
        9
    leye  
    OP
       2019-05-09 17:10:52 +08:00
    对的还有大小端
    leye
        10
    leye  
    OP
       2019-05-09 17:11:33 +08:00
    @ZgblKylin 多谢
    across
        11
    across  
       2019-05-09 17:13:44 +08:00
    是考转移字符和内存排布吧。

    上面其实说完了。
    4byte 的内存,用 char 方式写入数据,然后以 int 方式读取。
    PTLin
        12
    PTLin  
       2019-05-09 17:27:21 +08:00
    https://s2.ax1x.com/2019/05/09/EgyILn.png
    你的机器应该是小端法的,最低有效字节排在最前面。
    leye
        13
    leye  
    OP
       2019-05-09 17:33:29 +08:00
    @PTLin Cool~
    wheeler
        14
    wheeler  
       2019-05-09 20:51:15 +08:00
    luozic
        15
    luozic  
       2019-05-09 20:53:04 +08:00 via iPhone
    大小端和进制问题 还是很重要的
    leye
        16
    leye  
    OP
       2019-05-10 06:19:17 +08:00 via Android
    @luozic 多谢多谢
    leye
        17
    leye  
    OP
       2019-05-10 06:19:32 +08:00 via Android
    @wheeler 多谢多谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1188 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:29 · PVG 02:29 · LAX 10:29 · JFK 13:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.