首页
社区
课程
招聘
[旧帖] Win32汇编如何实现ASCII转字符,如ASCII为65,转换后为e 0.00雪花
2011-3-25 14:34 8580

[旧帖] Win32汇编如何实现ASCII转字符,如ASCII为65,转换后为e 0.00雪花

2011-3-25 14:34
8580
收藏
点赞0
打赏
分享
最新回复 (11)
雪    币: 208
活跃值: (148)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
xdklzy 1 2011-3-25 14:49
2
0
ASCII码本来就是表示字符的啊,还要转换成什么字符呢?
如下
ASCII         字符
0x30          '0'
0x31          '1'
0x32          '2'
..............
雪    币: 235
活跃值: (45)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
8713007 5 2011-3-25 15:35
3
0
想实现的功能类似于Delphi的Char
如Char(65),结果为字符e
雪    币: 31
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
门前小雪 2011-3-25 15:38
4
0
你的意思是说把字符输入然后显示它的ASCII,比如:
输入e 然后显示69H
如果是这样的话,输出的时候用格式%lx,就可以了!
雪    币: 235
活跃值: (45)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
8713007 5 2011-3-25 15:56
5
0
我想是这样的,输入65,显示的是e,如果输入的是35,则显示的是5
雪    币: 31
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
门前小雪 2011-3-25 18:13
6
0
哦,知道了!
输入的是按字符串处理的,‘65’,在计算机中表示出来后就是6和5的ASCII码值。
需要把ASCII转换为数值65h。
'6'的ASCII值为36h,
'5'的ASSCII值为35h,
(36h-30h)*10h+(35h-30h)
然后把值输出就好了!
雪    币: 654
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
Mx¢Xgt 7 2011-3-25 18:43
7
0
不用转换 35本来就是'5'
雪    币: 654
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
Mx¢Xgt 7 2011-3-25 18:45
8
0
mov eax,35
mov eax,'5'

两个是一样的
雪    币: 401
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiilin 2011-3-26 09:26
9
0
这几天刚好些了个C语言的,自己看着改一下吧。

//0xCC项只用于占位
static char        TableA[] = {0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xA0,0xB0,0xC0,0xD0,0xE0,0xF0};
static char        TableB[] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0xCC,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};

int main(int argc,char *argv[])
{
          //检查参数合法性等等,略

       for (i = 1; i < argc; i++)
        {
                data = TableA[argv[i][0] - '0'] + TableB[argv[i][1] - '0'];
                printf("%c",data);
        }
          printf("\n\n");
          return 0;
}

要注意,如果是数字,就是是ASCII-30,如果是大写字母,就要减去31,如果是小写字母要减51,要么就弄上六个if,我直接选择了查表。
雪    币: 31
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
门前小雪 2011-3-26 22:01
10
0
如果是在计算机中的表示35,就不用转换。
要是输入到计算机中的话是字符串‘35’,表示成33h,35h,
雪    币: 23
活跃值: (31)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
suhong 2011-4-4 12:26
11
0
做一个字母表,然后用汇编的查表指令不就解决了

这貌似为课本上的一道习题
雪    币: 28
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
元帅XYZ 2011-4-4 19:27
12
0
这里是转ASCII码的一个过程,接收为AX,当然也可以是AL,思想是先show出high byte,再show出low byte,供参考
output_ax_hex proc
    push    ax
    mov    al,ah
    call    output_al_hex
    pop    ax
output_al_hex::
    push    ax
    shr    al,4
    call    output_nibble_hex
    pop    ax
output_nibble_hex::
    and    al,0fh
    add    al,30h
    cmp    al,3ah
    jc      short @f              ;0-9(30h-39h)
    add    al,7                  ;A-F(41h-46h)
  @@:
    call    display_char
    ret
output_ax_hex endp

display_char proc
    push    ax
    push    bx
    mov    ah,0eh
    mov    bx,000fh
    int    10h                ;VBIOS write TTY
    pop    bx
    pop    ax
    ret
display_char endp

参考资料:http://topic.csdn.net/u/20080926/17/419571d8-e18d-4345-88f4-b376970af15c.html
游客
登录 | 注册 方可回帖
返回