| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1146 人关注过本帖
标题:求助:要怎么去理解? 应该是和编码有关,基础太差求普及。
只看楼主 加入收藏
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
结帖率:95.24%
收藏
已结贴  问题点数:20 回复次数:31 
求助:要怎么去理解? 应该是和编码有关,基础太差求普及。
程序代码:
#include <stdio.h>
int main(void)
{
    char * str = "";
    
    //可以认为两个输出是等价的吗,为什么是等价的呢?
    //这样连续是不是可以输出所有宽字符??
    printf("%c%c\n", str[0], str[1]); 
    
    //下面这样输出显示问号,有没有可能不连续也有输出??    
    //printf("%c\n%c\n", str[0], str[1]); 
    
    printf("%s\n", str);
    
    return 0;
}
2015-06-30 17:22
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:1 

因为中文象形文字字符集和西方的ASCII等字符集的二进制比率是16:8,简成2:1
现实是二进制8位根本包容不了我天朝文字数量,只得用16位或更多位的编码
2015-06-30 18:24
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
回复 2楼 hjx1120
ASCII编码字符集下的       printf("%c%c", ch1, ch2);

是不是可以等价

Unicode编码字符集下的    printf("%c", ch);

人有多懒,编程就有多难。
2015-07-01 09:04
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
是编码问题,跟系统的处理方式有关。你测试的这种不是Unicode,是ansi,亦即GBK的编码处理方式。

授人以渔,不授人以鱼。
2015-07-01 14:06
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:1 
解释这个问题,需要很长篇幅,也要介绍很多基础,都不知道怎么跟你说。

授人以渔,不授人以鱼。
2015-07-01 14:31
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
不纠结了,基础慢慢积累吧。总之先了解,两个%c%c能输出一个占两个字节的字符

程序代码:
/*
* 程序说明了:
*    连续输出两个字符,如果两个字符的值刚好对应一个宽字符编码,
*    将输出这个宽字符。
*/

#include <stdio.h>
int main(void)
{
    char * str1 = "";
    
    printf("%c %c\n", str1[0], str1[1]); 
    printf("%c%c\n", str1[0], str1[1]); 
    printf("%d %d\n", str1[0], str1[1]); 
    putchar(str1[0]);
    putchar(str1[1]);
    putchar('\n');
    putchar('\n');
    
    
    char str2[5] = {-69,-86, -69, -86, 70};
    //-69对应“华”高字节编码,-86对应华低字节编码,连续输出刚输出一个“华”字符
    printf("%c%c\n", str2[0], str2[1]);        
    printf("%c%c\n", str2[0], str2[3]); 
    //-69对应“籉”高字节编码,-86对应华低字节编码,连续输出刚输出一个“籉”字符
    printf("%c%c\n", str2[0], str2[4]);
    printf("%c%c%c%c\n", str2[0], str2[1], str2[2], str2[3]);
    //也许没有字符集使用3个字节的方式,所以对3个连续的字符输出不会显示某种字符集下的一个字符。
    //或者有但是C语言不支持???
    //printf("%c%c%c\n", str2[0], str2[1], str2[2]);
    //printf("%c%c%c\n", str2[2], str2[3], str2[4]);
    

    return 0;
}



人有多懒,编程就有多难。
2015-07-01 16:25
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:1 
回复 3楼 TAAAAB
楼主大人不是那样的,unicode两字节编码可包容65536个字符,对我天朝文字是可行的一种编码。
Unicode扩展自ASCII字符集。在严格的ASCII中,每个字符用7位表示,或者计算机上普遍使用的每字符有8位宽;
而Unicode使用全16位字符集。这使得Unicode能够表示世界上所有的书写语言中可能用于计算机通讯的字符、象形文字和其
它符号。Unicode最初打算作为ASCII的补充,可能的话,最终将代替它。考虑到ASCII是计算机中最具支配地位的标准,
所以这的确是一个很高的目标

  摘自《Windows程序设计中文版》
对于unicode编码及字符简史可以去看这本书的第二章

2015-07-01 16:46
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:1 

附上这本书的一个电子版本,可能对你另一个帖子什么头文件迷惑也有点帮助

链接: http://pan.baidu.com/s/1pJ0ynWZ 密码: txmd

2015-07-01 17:39
TAAAAB
Rank: 7Rank: 7Rank: 7
来 自:湖南
等 级:黑侠
威 望:1
帖 子:243
专家分:635
注 册:2011-5-29
收藏
得分:0 
回复 8楼 hjx1120
谢谢,学编程总是没有方向。总是这本书看两眼那本书看两眼,这次看能不能静下来把这本看完。

与其没方向乱翻不如先老老实实读完一本。

人有多懒,编程就有多难。
2015-07-01 17:52
hjx1120
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:李掌柜
等 级:贵宾
威 望:41
帖 子:1314
专家分:6927
注 册:2008-1-3
收藏
得分:1 
回复 9楼 TAAAAB
这本书C语言基础不行,看也是如同看小说一般
虽然这本书也是一本入门书,还是要有基础才行
我现在主看《C Primer Plus》
这本也是入门级的书,想精通,难
这些书就如同修仙小说中的修仙秘籍
学的技能多不代表有多牛X
把一本底级的修仙秘籍练到出神入化,
是有可能自创中高级修仙秘籍的
至少看中高级修仙秘籍也能看懂吧

现在的我能看懂底级修仙秘籍《C Primer Plus》
看中级修仙秘籍《C和指针》就是雾里看花,水中看月一般

我现在的目标就是把底级修仙秘籍《C Primer Plus》
这本书的17个层练到大乘,修练到出神入化境界

2015-07-01 18:27
快速回复:求助:要怎么去理解? 应该是和编码有关,基础太差求普及。
数据加载中...
 
   



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

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