看到一道面试题,谁能帮我详细解释下
一个字符如何变成十六进制啊,我只知道ABC这种东西有相应的ASCII然后转换成16进制,怎么汉字也有啊?谁能帮我详细解释下下面的代码?谢谢!
4. 以下代码有什么问题?[C难]
void char2Hex( char c ) // 将字符以16进制表示
{
char ch = c/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
char cl = c%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
cout << ch << cl << ' ';
}
char str[] = "I love 中国";
for( size_t i=0; i<strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
[解决办法]
#include <stdio.h>
//也就是将字符的ASCII码对应的10进制数用16进制表示
void char2Hex( char c ) // 将字符以16进制表示
{
//对于char类型的字符,范围为0-127
//'0'--'9'可以表示为0--9再加上'0';
//对于大于'9'的字符要用'A'--'F'来表示16进制
//但是对于汉字的一个字节(汉字由两个字节组成)它的值就有可能大于128,
//所以c的值就有可能为负值,所以会出现问题。
unsigned char n = c; //这样修改
char ch = n/0x10 + '0'; if( ch > '9' ) ch += ('A'-'9'-1);
char cl = n%0x10 + '0'; if( cl > '9' ) cl += ('A'-'9'-1);
//输出'0'-'9'和'A'--'F'的字符
cout << ch << cl << ' ';
}
int main()
{
char str[] = "I love 中国";
for( size_t i=0; i <strlen(str); ++i )
char2Hex( str[i] );
cout << endl;
return 0;
}
[解决办法]
代码有点问题:
函数原形可以改为:
void char2Hex( unsigned char c )
[解决办法]
汉字要用wchar_t类型!
[解决办法]
/*汉字区位码表:B0区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘B 鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱C 袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋D 靶把耙坝霸罢爸白柏百摆佰败拜稗斑E 班搬扳般颁板版扮拌伴瓣半办绊邦帮F 梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥B1区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 薄雹保堡饱宝抱报暴豹鲍爆杯碑悲B 卑北辈背贝钡倍狈备惫焙被奔苯本笨C 崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕D 毙毖币庇痹闭敝弊必辟壁臂避陛鞭边E 编贬扁便变卞辨辩辫遍标彪膘表鳖憋F 别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳B2区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 病并玻菠播拨钵波博勃搏铂箔伯帛B 舶脖膊渤泊驳捕卜哺补埠不布步簿部C 怖擦猜裁材才财睬踩采彩菜蔡餐参蚕D 残惭惨灿苍舱仓沧藏操糙槽曹草厕策E 侧册测层蹭插叉茬茶查碴搽察岔差诧F 拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖B3区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 场尝常长偿肠厂敞畅唱倡超抄钞朝B 嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨C 忱沉陈趁衬撑称城橙成呈乘程惩澄诚D 承逞骋秤吃痴持匙池迟弛驰耻齿侈尺E 赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹F 仇绸瞅丑臭初出橱厨躇锄雏滁除楚B4区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 础储矗搐触处揣川穿椽传船喘串疮B 窗幢床闯创吹炊捶锤垂春椿醇唇淳纯C 蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪D 葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催E 脆瘁粹淬翠村存寸磋撮搓措挫错搭达F 答瘩打大呆歹傣戴带殆代贷袋待逮B5区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 怠耽担丹单郸掸胆旦氮但惮淡诞弹B 蛋当挡党荡档刀捣蹈倒岛祷导到稻悼C 道盗德得的蹬灯登等瞪凳邓堤低滴迪D 敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠E 掂滇碘点典靛垫电佃甸店惦奠淀殿碉F 叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠B6区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 丁盯叮钉顶鼎锭定订丢东冬董懂动B 栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊C 独读堵睹赌杜镀肚度渡妒端短锻段断D 缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆E 多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹F 娥恶厄扼遏鄂饿恩而儿耳尔饵洱二B7区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 贰发罚筏伐乏阀法珐藩帆番翻樊矾B 钒繁凡烦反返范贩犯饭泛坊芳方肪房C 防妨仿访纺放菲非啡飞肥匪诽吠肺废D 沸费芬酚吩氛分纷坟焚汾粉奋份忿愤E 粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤F 佛否夫敷肤孵扶拂辐幅氟符伏俘服B8区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 浮涪福袱弗甫抚辅俯釜斧脯腑府腐B 赴副覆赋复傅付阜父腹负富讣附妇缚C 咐噶嘎该改概钙盖溉干甘杆柑竿肝赶D 感秆敢赣冈刚钢缸肛纲岗港杠篙皋高E 膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革F 葛格蛤阁隔铬个各给根跟耕更庚羹B9区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 埂耿梗工攻功恭龚供躬公宫弓巩汞B 拱贡共钩勾沟苟狗垢构购够辜菇咕箍C 估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜D 剐寡挂褂乖拐怪棺关官冠观管馆罐惯E 灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸F 桂柜跪贵刽辊滚棍锅郭国果裹过哈BA区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 骸孩海氦亥害骇酣憨邯韩含涵寒函B 喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎C 豪毫郝好耗号浩呵喝荷菏核禾和何合D 盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼E 亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴F 吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖BB区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 弧虎唬护互沪户花哗华猾滑画划化B 话槐徊怀淮坏欢环桓还缓换患唤痪豢C 焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌D 恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿E 秽会烩汇讳诲绘荤昏婚魂浑混豁活伙F 火获或惑霍货祸击圾基机畸稽积箕BC区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 肌饥迹激讥鸡姬绩缉吉极棘辑籍集B 及急疾汲即嫉级挤几脊己蓟技冀季伎C 祭剂悸济寄寂计记既忌际妓继纪嘉枷D 夹佳家加荚颊贾甲钾假稼价架驾嫁歼E 监坚尖笺间煎兼肩艰奸缄茧检柬碱硷F 拣捡简俭剪减荐槛鉴践贱见键箭件BD区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 健舰剑饯渐溅涧建僵姜将浆江疆蒋B 桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇C 嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较D 叫窖揭接皆秸街阶截劫节桔杰捷睫竭E 洁结解姐戒藉芥界借介疥诫届巾筋斤F 金今津襟紧锦仅谨进靳晋禁近烬浸BE区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 尽劲荆兢茎睛晶鲸京惊精粳经井警B 景颈静境敬镜径痉靖竟竞净炯窘揪究C 纠玖韭久灸九酒厩救旧臼舅咎就疚鞠D 拘狙疽居驹菊局咀矩举沮聚拒据巨具E 距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅F 攫抉掘倔爵觉决诀绝均菌钧军君峻BF区: 0 1 2 3 4 5 6 7 8 9 A B C D E FA 俊竣浚郡骏喀咖卡咯开揩楷凯慨刊B 堪勘坎砍看康慷糠扛抗亢炕考拷烤靠C 坷苛柯棵磕颗科壳咳可渴克刻客课肯D 啃垦恳坑吭空恐孔控抠口扣寇枯哭窟E 苦酷库裤夸垮挎跨胯块筷侩快宽款匡F 筐狂框矿眶旷况亏盔岿窥葵奎魁傀*/