| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2252 人关注过本帖
标题:union的使用,字符怎么打印出来的?求助
只看楼主 加入收藏
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:8 
union的使用,字符怎么打印出来的?求助
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
    #include <stdio.h>

    union hiddenMessage {
        int  ints[6];
        char chars[21];
    };

    int main() {
        union hiddenMessage intCharacters = {{1853169737, 1936876900, 1684955508, 1768838432, 561213039, 0}};

        printf("[");
        // only go to 18 because 1 byte is for the terminating 0 and we don't print the last in the loop
        for(int i = 0; i < 19; ++i){
            printf("%c,", intCharacters.chars[i]);
            //printf("%d, ", intCharacters.chars[i]);
        }
        printf("%c]\n", intCharacters.chars[19]);
       // printf("%d\n", intCharacters.chars[19]);
        printf("%s\n", intCharacters.chars);
    }

右侧打印的字符怎么得来的? I对应ascii码73,我怎么找不到??总之完全没有思路哦,请教各位大神

[此贴子已经被作者于2017-3-28 15:59编辑过]

2017-03-28 15:42
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10611
专家分:43210
注 册:2014-5-20
收藏
得分:10 
简单来说就是这样:
#include <stdio.h>

union hiddenMessage
{
    int  ints;
    char chars[5];
};

int main()
{
    union hiddenMessage intCharacters = {0x41424344};
    int i;
    for (i=0; i<4; ++i)
        printf("%c,", intCharacters.chars[i]);
    intCharacters.chars[i] = '\0';   
    printf("\n%s", intCharacters.chars);   
}
2017-03-28 16:12
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 2楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册

大神回复真快呀!
0x41424344是地址吗?我觉得自己有关键点没理解,。神奇的输出了字符~~~

跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-28 16:24
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10611
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用sharplong在2017-3-28 16:24:05的发言:


大神回复真快呀!
0x41424344是地址吗?我觉得自己有关键点没理解,。神奇的输出了字符~~~

ASCII  CHAR
0x41   A
0x42   B
0x43   C
0x44   D
2017-03-28 17:14
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:10 
{{1853169737, 1936876900, 1684955508, 1768838432, 561213039, 0}}

你的这串10进制数换算十六进制是这样的。

6E752049 73726564 646E6174 696E5520 21736E6F 0
于是,你就有了 21个字符,分别是,当然这是基于char是无符号数,如果是有符号的话,得到的数字会更小。
6E
75
20
49
73
72
65
64
64
6E
61
74
69
6E
55
20
21
73
6E
0

[此贴子已经被作者于2017-3-28 17:32编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-28 17:20
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 4楼 吹水佬
谢谢!~~明白了。谢谢大神耐心回答,我真的很菜

跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-28 17:29
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 5楼 renkejun1942
{1853169737, 1936876900, 1684955508, 1768838432, 561213039, 0}

6e752049  73726564   646e6174    696e5520    21736e6f  0

6e ---  n
75 ---  u
20 ---  空格
49 ---  I

73 ---  s
72 ---  r
65 ---  e
64 ---  d

64 ---  d
6e ---  n
61 ---  a
74 ---  t

69 ---  i
6e ---  n
55 ---  U
20 ---  空格

21 ---  !
73 ---  s
6e ---  n
6f ---  o

0  ---  NULL

大神你的回答真是详细呀,解决了我的问题。
他的字符输出顺序很有意思----!!

一个8位字节刚好容下一个两位16进制数,一个整形4个字节被分解为4个两位16进制数,对应4个字符
int 4byte ---------4 * char 1byte ----------4 * 两位16进制数--------4* 字符
对吧??

[此贴子已经被作者于2017-3-28 18:13编辑过]


跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-28 18:01
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 7楼 sharplong
实际上最好不要跟你主楼的代码那样写,因为很多原因。
第一,如果char占两个字节呢?也许你觉得这不可能。
第二,如果char是有符号数呢?那么,一个字节就只有7个位来存储数字,高位用来存储符号,那么你把那些十六进制的数转换为二进制再来看看,结果就截然不同了。

你主楼的代码,除了用来让新手产生很神奇的错觉之外,毫无用处,甚至根本不该这样写。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-28 18:57
sharplong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:122
专家分:121
注 册:2017-3-27
收藏
得分:0 
回复 8楼 renkejun1942
这是学习C时候在网上找的代码,我自己不是很理解。并不是我本人写的。

跟据科学研究呢,拥有一个良好的头像呢,有助于提高帖子关注度,和被友好对待的可能性:)准确来说呢,其实,我是一个演员....和兼职汽车维修员
2017-03-28 19:45
快速回复:union的使用,字符怎么打印出来的?求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022383 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved