Re: [问题] 1 Byte 转 2 ASCII

楼主: chrisos (克里斯)   2015-06-10 09:44:15
※ 引述《hccash (风雨飘摇)》之铭言:
: 开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
: VS 2008
: 问题(Question):
: 请问板上各位大大
: 今天假设我有一BYTE数值为0x01
: 我如何转换为两个ASCII - 0x30 0x31
: 并且储存成为WORD大小0x3031呢?
: 感谢!
借文问一下,那请问如果是0xA2的状况呢?
原文中推文的解答是利用取值加上0x30的方式,但这方式只能对应到0~9
ascii表中A是由0x41开始 a是由0x61开始
如果我有一组乱数产生的HEX档,我要怎么做转换会比较好?
ps:补充一下平台,使用在Microchip上,compiler为XC8,相容于C99规范(纯C)
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-06-10 09:54:00
通通normalize成0-15,然后随便你爱加多少。
楼主: chrisos (克里斯)   2015-06-10 10:29:00
欸...不是很懂XD 可以稍微解释一下吗QQ
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-06-10 10:32:00
不管你处理[0-9A-F]或[0-9a-f]都可以转成0..15吧
楼主: chrisos (克里斯)   2015-06-10 10:42:00
转成0~15是指原文中 value & 0x0f 的这种方式吗?
作者: EdisonX (卡卡兽)   2015-06-10 12:26:00
你可以用if else,结果正确就行。
作者: Feis (永远睡不着 @@)   2015-06-10 13:18:00
或者你喜欢让人家看不懂:12336+(s>>4<<8)+s%16+(s>=160)*1792+(s%16>=10)*7
作者: uranusjr (←這人是超級笨蛋)   2015-06-10 13:28:00
至少也用 switch 吧, if-else 也太夸张 XD
楼主: chrisos (克里斯)   2015-06-10 13:40:00
对了 value就是1Byte hex ASCII阵列是2 Byte ASCII然后array里面应该写0、1比较好,没注意到
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-06-10 14:13:00
嗯我弄错了 X(
作者: firejox (Tangent)   2015-06-11 18:24:00
Ascii[1] = "0123456789abcdef"[(value&0xf0)>>4]
楼主: chrisos (克里斯)   2015-06-12 09:42:00
?? 上面是?
作者: uranusjr (←這人是超級笨蛋)   2015-06-12 23:15:00
长短不是问题啊, 效率和可维护性才是
作者: firejox (Tangent)   2015-06-15 00:39:00
用索引取值的方式 算是一个简单好读的方法

Links booklink

Contact Us: admin [ a t ] ucptt.com