Push ecx
shl
edx,
1
mov eax,esi
{
$IFDEF VER210
}
movzx ecx, word ptr [edi
-
12
]
{
需要设置CodePage
}
{
$ENDIF
}
call System.@LStrSetLength
//
设置新串长度
mov eax,esi
//
新字符串地址
Call UniqueString
//
产生一个唯一的新字符串,串位置在eax中
Pop ecx
@@SetHex:
xor
edx,edx
//
清空edx
mov dl, [edi]
//
Str字符串字符
mov ebx,edx
//
保存当前的字符
shr
edx,
4
//
右移4字节,得到高8位
mov dl,byte ptr[edx
+
@@HexChar]
//
转换成字符
mov [eax],dl
//
将字符串输入到新建串中存放
and
ebx,$0F
//
获得低8位
mov dl,byte ptr[ebx
+
@@HexChar]
//
转换成字符
inc eax
//
移动一个字节,存放低位
mov [eax],dl
inc edi
inc eax
loop @@SetHex
@@Exit:
pop edi
pop esi
pop ebx
@@HexChar: db
'
0123456789ABCDEF
'
end
;
function
HexToStr(
const
Str: AnsiString): AnsiString;
asm
push ebx
push edi
push esi
test eax,eax
//
为空串
jz @@Exit
mov edi,eax
mov esi,edx
mov edx,[eax
-
4
]
test edx,edx
je @@Exit
mov ecx,edx
push ecx
shr
edx,
1
mov eax,esi
//
开始构造字符串
{
$IFDEF VER210
}
movzx ecx, word ptr [edi
-
12
]
{
需要设置CodePage
}
{
$ENDIF
}
call System.@LStrSetLength
//
设置新串长度
mov eax,esi
//
新字符串地址
Call UniqueString
//
产生一个唯一的新字符串,串位置在eax中
Pop ecx
xor
ebx,ebx
xor
esi,esi
@@CharFromHex:
xor
edx,edx
mov dl, [edi]
//
Str字符串字符
cmp dl,
'
0
'
//
查看是否在0到f之间的字符
JB @@Exit
//
小于0,退出
cmp dl,
'
9
'
//
小于
=
9
ja @@DoChar
//
CompOkNum
sub dl,
'
0
'
jmp @@DoConvert
@@DoChar:
//
先转成大写字符
and
dl,$DF
cmp dl,
'
F
'
ja @@Exit
//
大于F退出
add dl,
10
sub dl,
'
A
'
@@DoConvert:
//
转化
inc ebx
cmp ebx,
2
je @@Num1
xor
esi,esi
shl
edx,
4
mov esi,edx
jmp @@Num2
@@Num1:
add esi,edx
mov edx,esi
mov [eax],dl
xor
ebx,ebx
inc eax
@@Num2:
dec ecx
inc edi
test ecx,ecx
jnz @@CharFromHex
@@Exit:
pop esi
pop edi
pop ebx
end
;
procedure
TForm1.Button1Click(Sender: TObject);
var
str: Ansistring;
begin
str :
=
'
不得闲按时打发
'
;
str :
=
StrToHex(str);
ShowMessage(str);
ShowMessage(HexToStr(str));
end
;
转:16进制转10进制算法各编程语言代码咋写?
在 C# 中,可以使用 Convert.ToInt32() 函数将 16 进制数转换为 10 进制数。该函数需要两个参数,第一个参数是要转换的 16 进制数,第二个参数是基数(即进制)。
整个字符串处理
在scanf()和printf()函数中,%s指的就是字符串
所以我们就可以使用scanf("%s",str)和printf("%s",str)从键盘处读取字符串并将字符串打印出来
C语言输出字符串
C语言标准函数库中 printf 函数和 puts 函数都可以输出字符串,但各有优点和缺点。我们综合两者的优点,设计一个函数来输出字符串。说明:str 为字符串的起始地址。函数将输出 str 所指示的字符串,不自动换行。函数值为输出字符的数目。
C语言输入字符串
说明:str 为字符串的起始地址,size 为字符数组的尺寸。函数读取用户从键盘输入的字符串(以换行符 ‘\n’ 结束)到 str 所指示的字符数组中,并在字符末尾添加字符串结束标记 ‘\0’,函数值为 str。显然,字符串的最大长度为 size - 1,为字符串结束标记 ‘\0’ 预留空间。若用户输入的字符过多,则函数最多读取 size - 1 个字符,剩余字符仍留在缓冲区中,可以继续被后面的输入函数读取。我们综合两者的优点,克服两者的缺点,设计一个函数来输入字符串。
Win32汇编:字符串浮点数运算过程
整理复习汇编语言的知识点,以前在学习《Intel汇编语言程序设计 - 第五版》时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会有新的收获,这次复习,我想把书中的重点,再一次做一个归纳与总结(注:16位汇编部分跳过),并且继续尝试写一些有趣的案例,这些案例中所涉及的指令都是逆向中的重点,一些不重要的我就直接省略了,一来提高自己,二来分享知识,转载请加出处,敲代码备注挺难受的。