最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析。

**********************************************************************

参考资料一:http://zhidao.baidu.com/link?url=YDoT2OLdKEElDQ86Ce_wEtKt9Nrn2yJ8TIb9JkasvaLvi8D66RRwSvxn2DkFRVM_OOnq4fCoJPA-19AmpPeypa

?“206 210 176 174 214 236 187 219 ” 是 ASCII码 , 编辑成中文是什么 ???

提问者采纳:

非常无语啊。。。我们是很有敬业精神的。。意为"我爱朱慧"

********************************************************

现在开始分析:

资料一说:

“206 210 176 174 214 236 187 219 ” 是 ASCII码 , 编辑成中文是“我爱朱慧”。

写成代码:

#include<stdio.h>
int main(void)
{
printf("%c%c%c%c%c%c%c%c",206,210,176,174,214,236,187,219);
printf("\n");
return 0;
}

运行结果:

看到这里,好像明白了。

汉字是双字节,且两个数字可以 编码一个汉字。

总结下就是:

206+210=我

176+174=爱

214+236=朱

187+219=慧

呵呵,到这里就没必要再深究啦。

可是,突发奇想,想找到用哪两个数字可以组合出“你”字?

想搞出“我爱你”编码!嘿嘿。

于是,我进行了大量测试。没办法,不是很懂这个,只好用循环来做啦。

编写代码如下。

测试发现129到247有编码汉字,其余范围无法编码成汉字。

测试代码一:

#include<stdio.h>
int main(void)
{
    int i;
    for(i=129;i<=247;i++)
    printf("%d+%d=%c%c\t",i,i,i,i);
    printf("\n");
    return 0;
}

运行结果:

测试代码二:

#include<stdio.h>
int main(void)
{
int i;
for(i=129;i<=247;i++)
printf("%d+%d=%c%c\t",i,i+1,i,i+1);
printf("\n");
return 0;
}

运行结果:

测试代码三:

#include<stdio.h>
int main(void)
{
int i;
for(i=129;i<=247;i++)
printf("%d+%d=%c%c\t",i,i+2,i,i+2);
printf("\n");
return 0;
}

......

以此类推,测试了几组代码后总结如下:

206+210=我
176+174=爱
184+184=父
208+208=行
193+193=亮
183+183=贩
198+198=破
131+131=傻
188+188=技
177+177=北
180+180=创
181+181=档
182+182=抖
185+185=构
186+186=汉
187+187=换
191+191=靠
196+196=哪
195+195=妹
202+202=适
197+197=排
200+200=热
214+214=种
199+199=乔
213+213=照
199+199=乔
204+204=烫
192+192=览
180+181=吹
181+182=刀
176+177=氨
204+205=掏
206+207=蜗
192+193=懒
187+188=患
182+183=斗
185+186=购
190+191=究
191+192=坷
197+198=牌
180+181=吹
183+184=犯
193+194=谅
194+195=旅
198+199=魄
199+200=侨
203+204=颂
206+207=蜗
207+208=闲
208+209=醒
209+210=岩
176+178=安
177+179=背
178+180=泊
179+181=车
180+182=炊
183+185=饭
184+186=负
185+187=够
186+188=杭
187+189=唤
188+190=季
190+192=纠
195+197=门
198+200=迫
199+201=巧
200+202=仁
201+203=伤
203+205=送
204+206=涛
205+207=拖
208+210=幸
210+212=以
211+213=诱
212+214=灾
213+215=兆
214+216=重
215+217=踪
176+179=俺
177+180=贝
178+181=驳
181+184=蹈
182+185=豆
183+186=泛
184+187=富
185+188=辜
186+189=航
193+196=聊
194+197=屡
195+198=闷
196+199=那
200+203=人
201+204=商
202+205=释
203+206=宋
209+212=言
210+213=艺
211+214=又
212+215=宰
217+220=余
176+180=按
178+182=捕
179+183=撤
181+185=倒
182+186=逗
188+192=祭
195+199=们
197+201=派
200+204=忍
201+205=赏
202+206=饰
212+216=载
213+217=召
214+218=众
177+182=倍
181+186=岛
183+188=芳
214+219=舟
215+220=总
212+217=再
210+215=易
208+213=姓
207+212=显
190+185=久
176+182=岸
180+186=春
182+188=都
183+189=方
200+206=任
201+207=上

找了半天都没找到“你”,汗,真的累了。

又百度,看看有没有好的其他便捷的方法。

搜索了半天,终于找到了资料二。

*****************************************************************************

参考资料二:http://zhidao.baidu.com/link?url=TyO1WecgunJH_ZOeeSqX1o8O8QPxga2B7JsMrQRzWajNs7O8Nh-g-Yr3B-zzAV1vO_vDqcn6qNDVqj8DwHDH2q

题目:

C语言中两位ASCII码可以表示汉字(如202,214表示手)请问两位ASCII怎么与GB2312中的区位码相对应

“啊”是国标码中的第一个是1601,用ASCII码怎么表示它
答案:
#include<stdio.h>int main(void)
{
char s[]="啊";//汉字在C/C++中是用2个字节表示的,而对应的ASCII码则是两个负数。
char m[3];
printf("%d %d\n",s[0],s[1]); /*注释 s[0]=-80,s[1]=-95 注释*/
m[0]=-80;
m[1]=-95;
m[2]=0;
puts(m);//两个字节连起来凑成一个汉字。
}

运行结果:

*********************************************************************************************************

于是,我模仿资料二,找出汉字”你“的编码。

编写下列代码:

#include<stdio.h>
int main(void)
{
char s[]="你";//汉字在C/C++中是用2个字节表示的,而对应的ASCII码则是两个负数。
char m[3];
printf("%d %d\n",s[0],s[1]);
m[0]=-60;
m[1]=-29;
m[2]=0;
puts(m);//两个字节连起来凑成一个汉字。
return 0;
}

运行结果:

再修改代码:

#include<stdio.h>
int main(void)
{
char s[]="你";//汉字在C/C++中是用2个字节表示的,而对应的ASCII码则是两个负数。
char m[3];
printf("%c%c\n",s[0],s[1]);
m[0]=-60;
m[1]=-29;
m[2]=0;
puts(m);//两个字节连起来凑成一个汉字。
return 0;
}

运行结果:

好了,大功告成了!哈哈,终于搞出来了。

最终完善代码:

方法一:

#include<stdio.h>
int main()
{
int i;
printf("%c%c%c%c%c%c\n",206,210,176,174,-60,-29);
return 0;
}

感谢zhykin前辈提供的第二种方法:

#include<stdio.h>
int main()
{
int i;
printf("%c%c%c%c%c%c\n",,,,,,);
return ;
}

运行结果:

今天上博客,发现犯了低级错误,很抱歉,手误,把I写成了L。

还有很感谢各位前辈的指点和教诲,在下定当虚心努力改进。

感谢zhykin前辈的指教,一语惊醒梦中人,使我对这个编码了解的更深了。

这里引用“zhykin”前辈的话总结下:

都是字符256余数的关系,“我”可以表示成206,210,也可以表示成-50,-46;同理“你”也可以是196,227。

“我”可以用206,210表示也可以用-50,-46表示。

“你”可以用196,227表示也可以用-60,-29表示.

再次对zhykin前辈表示衷心的感谢!

汗,刚一好友提醒了下,再次发现问题,原来以上都是我的误解,对此表示抱歉。

这原来是GBK编码。

GBK汉字编码表:

参考博文:http://blog.sina.com.cn/s/blog_8184e033010109ug.html

比如:“命”的GBK编码为:0xC3,0xFC

证明代码:

#include<stdio.h>
int main()
{
int i;
printf("%c%c\n",0xC3,0xFC);
return ;
}

运行结果如下:

在下学艺不精,对此误导了大家,造成错误影响深感抱歉!

在此公开表示道歉!


最后奉上一个软件小工具,可以定制你的专属表白代码

下载地址:https://download.csdn.net/download/hadues/11107523

C语言中两位ASCII码可以表示汉字的更多相关文章

  1. [整理]C语言中字符常量与ASCII码

    所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为 ...

  2. C语言:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。-使字符串的前导*号不得多于n个,若多余n个,则删除多余的*号,

    //fun函数:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动. #include <stdio.h> void fun( char * ...

  3. C语言中的位运算和逻辑运算

    这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...

  4. LANG=C是最早最简单的C语言环境(标准ASCII码)

    LANG=C是最早最简单的C语言环境(标准ASCII码)

  5. C语言中两个相同类型的结构体变量之间是可以相互直接赋值的

    C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...

  6. C 语言实例 - 字符转 ASCII 码

    C 语言实例 - 字符转 ASCII 码 C 语言实例 C 语言实例 ASCII 定义了 个字符. 分类: 一:-.(删除键)是控制字符 二:空白字符:空格(). 制表符. 垂直制表符. 换行. 回车 ...

  7. C/C++语言中的位运算

    在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...

  8. python中字母与ascii码的相互转换

    在做python编程时,碰到了需要将字母转换成ascii码的,原本以为用Int()就可以直接将字符串转换成整形了,可是int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报 ...

  9. python中字母与ASCII码之间的转换以及进制间的转换

    字母与ascii码: ord(c):参数是长度为1的字符串,简称字符.当参数为统一对象时(unicode object),返回能代表该字符的统一编码,当参数为8比特的字符串时,返回该字节的值.例如,o ...

随机推荐

  1. Runtime 交换方法

    创建UIImage分类UIImage+Image.h #import<UIKit/UIKit.h> @interfaceUIImage (Image) + (__kindof UIImag ...

  2. 关于placeholder中 文字添加换行 用转义字符&#13;&#10;代替<br>

    今天遇到一个问题 UI给的效果图中 文本域的提示文字 是两行显示, 于是就想到placeholder中能否解析html标签, 尝试后发现并无卵用, 经过调查后发现 可以用转义字符代替<br> ...

  3. asp.net导出dbf报错“未在本地计算机上注册“VFPOLEDB”提供程序。”

    导出dbf文件报错,提示“未在本地计算机上注册“VFPOLEDB”提供程序.” 可以尝试一下方法: 方法一:下载VFPOLEDBSetup.msi 安装 如果方法一不行:继续方法二:下载vfp9.0 ...

  4. 普通用户使用dbms_xplan包需要有的权限

    普通用户使用dbms_xplan包查看执行计划需要对v$sql.v$sql_plan.v$session及v$sql_plan_statistics_all这四个视图同时具有select权限. 如果普 ...

  5. 微信公共平台开发-(.net实现)5--access_token过期的问题

    每次在于微信交互时,都要用到access_token,但是这个值限制的是有时间的,但是access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token ...

  6. [教程]怎么用百度云观看和下载"磁力链接"无需下载直接观看.

    1, 打开网址 http://okbt.net/  输入你想要看的电影名字, 点搜索,鼠标右键点击拷贝磁力链接.或者 电脑装了迅雷的话.可以直接点击.用迅雷下载. 磁力链接都是这种格式的.例: mag ...

  7. 认识SQLServer索引以及单列索引和多列索引的不同

     一.索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使 ...

  8. 常用的HTML5、CSS3新特性能力检测写法

    伴随着今年10月底HTML5标准版的发布,未来使用H5的场景会越来越多,这是令web开发者欢欣鼓舞的事情.然而有一个现实我们不得不看清,那就是IE系列浏览器还占有一大部分市场份额,以IE8.9为主,w ...

  9. DISCUZ 自定义模板

    DISCUZ 自定义模板 模板安装和维护 安装新模板 将模板template打包放在对应目录:template/ 后台 -> 界面 -> 风格管理 , 安装模板 后台 -> 界面 - ...

  10. import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包(转载)

    http://www.xuebuyuan.com/2008608.html 在Eclipse中处理图片,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCode ...