C语言中两位ASCII码可以表示汉字
最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析。
**********************************************************************
?“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=上 |
找了半天都没找到“你”,汗,真的累了。
又百度,看看有没有好的其他便捷的方法。
搜索了半天,终于找到了资料二。
*****************************************************************************
题目:
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 ;
}
运行结果如下:

在下学艺不精,对此误导了大家,造成错误影响深感抱歉!
在此公开表示道歉!
最后奉上一个软件小工具,可以定制你的专属表白代码

C语言中两位ASCII码可以表示汉字的更多相关文章
- [整理]C语言中字符常量与ASCII码
所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为 ...
- C语言:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。-使字符串的前导*号不得多于n个,若多余n个,则删除多余的*号,
//fun函数:从p所指字符串中找出ASCII码最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动. #include <stdio.h> void fun( char * ...
- C语言中的位运算和逻辑运算
这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286 位运算 C语言中的位运算包括与(&),或(|),亦或(^),非( ...
- LANG=C是最早最简单的C语言环境(标准ASCII码)
LANG=C是最早最简单的C语言环境(标准ASCII码)
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的
C语言中,在相同类型的变量间赋值时是直接内存复制的,即将他们的内存进行复制,而两个同类型的结构体变量属于同一种变量,所以赋值时是按照他们的内存分布来直接拷贝的.所以,在C语言中两个相同类型的结构体变量 ...
- C 语言实例 - 字符转 ASCII 码
C 语言实例 - 字符转 ASCII 码 C 语言实例 C 语言实例 ASCII 定义了 个字符. 分类: 一:-.(删除键)是控制字符 二:空白字符:空格(). 制表符. 垂直制表符. 换行. 回车 ...
- C/C++语言中的位运算
在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...
- python中字母与ascii码的相互转换
在做python编程时,碰到了需要将字母转换成ascii码的,原本以为用Int()就可以直接将字符串转换成整形了,可是int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报 ...
- python中字母与ASCII码之间的转换以及进制间的转换
字母与ascii码: ord(c):参数是长度为1的字符串,简称字符.当参数为统一对象时(unicode object),返回能代表该字符的统一编码,当参数为8比特的字符串时,返回该字节的值.例如,o ...
随机推荐
- Linux学习进阶路线图
摘自:http://blog.csdn.net/zdwzzu2006/article/details/4334791 Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 L ...
- 百度BAE JAVA环境项目部署和调试
起初在一个应用挂在虚拟主机上,昨天早上虚拟主机挂了.本来考虑迁移到SAE上的,但之前发现SAE的JVM云豆消耗的太快(PS:我是中级开发者,每月 10000云豆,如果有哪位大神对SAE JAVA云豆能 ...
- [Asp.net 开发系列之SignalR篇]专题五:SignalR支持的平台
SignalR支持多种服务器和客户端配置.此外,每种传输方式都有自身的要求限制:如果某种传输方式不被系统支持,SignalR能够优雅地将故障转移到其他类型的传输方式.关于SignalR所支持的传输方式 ...
- 在Linux上用自己编译出来的coreclr与donet cli运行asp.net core程序
先在 github 上签出 coreclr 的源代码,运行 ./build.sh 命令进行编译,编译结果在 coreclr/bin/Product/Linux.x64.Debug/ 文件夹中. 接着签 ...
- Windows Phone App的dump文件实例分析- System.ExecutionEngineException
前言 在开始这篇文章之前我们先来讲讲如何从高度优化的Release版的Dump中找到正确的异常上下文地址,并手动恢复异常发生的第一现场. 1. 什么是异常上下文 简单来说,在windows体系的操作系 ...
- JavaScript使用DeviceOne开发实战(二) 生成调试安装包
生成调试安装包 首先需要说明的是,这个步骤并不是每次调试App都必须的,大部分情况生成一次调试安装包,安装到手机上之后就可以忽略整个这个步骤.因为调试安装包包含了很多原生组件,都是可以定制勾选的,如果 ...
- zend studio 常用快捷键
zend studio是一款很棒的PHP语言编译器,强大的功能让很多程序员爱不释手,而快捷键更是程序员加快编写代码的利器,那么一起来看看有哪些好用的快捷键吧. 复制当前行:ctrl+alt+↓ 删除当 ...
- 【译】用jQuery 处理XML-- DOM(文本对象模型)简介
用jQuery 处理XML--写在前面的话 用jQuery 处理XML-- DOM(文本对象模型)简介 用jQuery 处理XML--浏览器中的XML与JavaScript 用jQuery 处理XML ...
- Atitti 跨语言异常的转换抛出 java js
Atitti 跨语言异常的转换抛出 java js 异常的转换,直接反序列化为json对象e对象即可.. Js.没有完整的e机制,可以参考java的实现一个stack层次机制的e对象即可.. 抛出Ru ...
- WPF入门教程系列二——Application介绍
一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只 ...