首页
社区
课程
招聘
如何将数字字符串转化为数字(汇编)
发表于: 2006-5-20 18:43 10676

如何将数字字符串转化为数字(汇编)

2006-5-20 18:43
10676

在一个电子文档中看到
= 问题 =
  怎样将数字转换成字符串?
例如:
num word 123
buffer byte 512 dup(?)

怎样将数字num转换到字符串buffer中成为"123\0"?  

--------------------------------------------------------------------------------
  用masm32.lib中的函数:
invoke dw2a,num,addr buffer
这样将123\0变成串保存在buffer中

我想问有没有函数可以将数字字符串转化为数字
例如将"123"转化为123

字符穿中有非数字字符如何判断?
(win32汇编)


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
<1>数字转成字符串:
   时间太晚了,只给个程序段吧......... 好想睡呀...好了..不f废话了吧....
 
 /*EAX中放数字,buffer address in esi...*/
  /* convert a usigned number to a string ......*/
     
       mov ebx,10    ; number base
 Next:
      xor edx,edx
      div ebx
      add dl,30h
      mov byte ptr [esi],dl
      inc esi
      cmp eax,0
      jnz Next
      
      mov [edi],0 ;end a string with NULL
   ...
   ...
   ;DO other works.
<2>关于字符串转成数字有好多函数可用呀..它们转化时都是以遇到第一个
非数字为转换结束条件的....
EG:
   "1323A34" 转成数字结果为...1323.
函数有(C库):atoi(),atol(),atof() and so forth.....

不知道我说的是不是清楚.....请指教.....有点困呀...如果有错请原谅了....
2006-5-21 01:15
0
雪    币: 211
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
希望 能多出点汇编上的类型转换
2006-5-21 11:26
0
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
最初由 AsmCCPlus 发布
<1>数字转成字符串:
时间太晚了,只给个程序段吧......... 好想睡呀...好了..不f废话了吧....
 
 /*EAX中放数字,buffer address in esi...*/
/* convert a usigned number to a string ......*/
........


数字转字符串已经有库函数拉,最关键的是字符串转数字~~~~~~~~~~~~
2006-5-21 15:14
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
5
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;StrToInt是将内存中的ASCII码以十进制形式转成一个整数(DEC)
;lpszStr指向要转换的ASCII码,如果该ASCII码中包含有非数字则返回0
StrToInt proc uses esi lpszStr
  xor esi,esi
  xor eax,eax
@@:
  mov ecx,lpszStr
  movzx ecx,Byte ptr [ecx+esi]
  test cl,cl
  jz @f
  .if ((cl >= '0') && (cl <= '9'))
    sub cl,'0'
    lea eax,[eax+eax*4]
    lea eax,[ecx+eax*2]
    inc esi
    jmp @b
  .else
    xor eax,eax
    ret
  .endif
@@:
  ret
StrToInt endp

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;StrToInt是将内存中的ASCII码以十六进制形式转成一个整数(HEX)
;lpszStr指向要转换的ASCII码,iStrlen指向Str的长度。
;如果该ASCII码中包含有非数字或大于'f'的数则返回0
StrToHex proc uses esi edi ebx lpszStr,iStrLen
        xor esi,esi
        xor edx,edx
        xor ebx,ebx
        mov edi,iStrLen
@@:
        mov eax,lpszStr
        movzx eax,BYTE ptr [eax+esi]
        test al,al
        jz @f
        .if ((al >= 'A') && (al <= 'F')) || ((al >= 'a') && (al <= 'f'))
                sub al,'W'
                adc dl,dl
                shl dl,5
                add al,dl
                jmp Next
        .elseif ((al >= '0') && (al <= '9'))
                sub al,'0'
Next:        lea ecx,[edi-1]
                and eax,0fh
                shl ecx,2
                shl eax,cl
                add ebx,eax
                dec edi
                inc esi
                jmp @b
        .else
                xor eax,eax
                ret
        .endif
@@:
        mov eax,ebx
        ret
StrToHex endp
2006-5-21 15:59
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
6
不是有标准C函数atoi/atof什么的吗?
2006-5-21 16:03
0
雪    币: 253
活跃值: (250)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
7
wsprintf
2006-5-21 18:11
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
两种转换都有库函数可以用了.....唉......itoa(),atoi()...........
2006-5-21 22:59
0
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢版主的代码...
楼上的能不能给个示范,如何调用?
2006-5-22 14:04
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
/*Prototype of the functions.*/
/*the stdlib.h               */

int atoi( const char *string );
char *_itoa( int value, char *string, int radix );

#include <stdlib.h>
#include <stdio.h>

int main()
{
  char* szStr = "123456";
  int   iNumber = 7890;
  char szBuffer[20];

  printf("Convert string %s to a number %d.\n",szStr,
         atoi(szStr));
  printf("Convert number %d to a string %s.\n",iNumber,
        _itoa(iNumber,szBuffer,10));
  printf("the result is %s\n",szBuffer);
  
  return 0;
}
  
2006-5-22 23:00
0
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
11
兄弟误解我了,我是想你给我一个汇编的范例,C我也会...
我用的是MASM32 v9.0
需要include和includelib哪些文件???
最好给个example
2006-5-23 13:06
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
  唉.....老兄偶也是自己在学习......由于MASM32中不包括C库中的头文件.....即没有相应的*.INC文件....也没有想应的库,那就只能自己从STDLIB.H中手工整理出函数的原形了.........至于库从VC中找到libc.lib or MSVCRT.LIB 包含进去了.....
如下..
     printf  proto   foramt:dword, vararg
     atoi    proto   string:dword
     itoa    proto   value:dword, string:dword, radix:dword

时间是珍贵的东西....希望兄弟原谅...不能给程序....自己多作下吧..谁都是从不断试验中过的......
2006-5-23 23:49
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
唉....偶还是写了一个程序............希望对你有用.....................................
/*-------------------------------------------------------------------*/
                    .386
                    .model    flat, c
                    option casemap:none
                    
                    includelib  MSVCRT.LIB
                    
                    .data
                    
     szFormatA      db        'Convert string %s to number %d',0dh,0ah,0
     szFormatB      db        'Convert number %d to string %s',0dh,0ah,0
     szStr          db        '12345',0
     szBuffer       db        20 dup(?)
     iResult        dd        0
     iNumber        dd        6789
     
                    .code
     

     printf  proto   foramt:dword, :vararg
     atoi    proto   string:dword
     _itoa   proto   value:dword, string:dword, radix:dword
     exit    proto   statu:dword
     
     Start:                  
                     invoke  atoi, offset szStr
                     mov iResult, eax
                     
                     invoke  printf, offset szFormatA, offset szStr, iResult
                     
                     invoke  _itoa, iNumber, offset szBuffer, 10           
                     invoke  printf, offset szFormatB, iNumber, offset szBuffer
                     
                     invoke  exit, 0
                     
                     end  Start

/*--------------------------------------------------------------------*/
ml /c /coff test.asm <cr>
link /subsystem:console /libpath:E:\SoftDevTools\VC++\VC98\Lib test.obj <cr>
test <cr>

Convert string 12345 to number 12345
Convert number 6789 to string 6789

2006-5-24 23:00
0
雪    币: 221
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
14
Thanks for your help...!!!
2006-5-27 14:23
0
游客
登录 | 注册 方可回帖
返回
//