参考例子如下:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
float hex2asc(unsigned char* datas, int n)
{
float val
char* str = (char*)malloc((n + 1) * sizeof(char))
memcpy(str, datas, n)
str[n] = '\0'
val = (float)atof(str)
free(str)
return val
}
int main(int argc, char* argv[])
{
unsigned char datas[] = {0x20, 0x20, 0x20, 0x33, 0x35, 0x30, 0x2e, 0x30, 0x20, 0x20, 0x20}
printf("%f\n", hex2asc(datas, 11))
return 0
}
unit encodeAndDecode{
该单元实现对字符串的简单加密解密。
加密方法是取得一个char的ASCII码,然后把它转换成十六进制。
}
interface
uses SysUtils
function encode(source:string):string
function decode(source:string):string
implementation
function encode(source:string):string
var
i,Ascii,strLen:integer
a:char
hex:string
begin
result:=''
strLen:=length(source)
for i:=1 to strLen do
begin
a:=source[i]
ascii:=ord(a)
hex:=intToHex(ascii,2)
result:=result+hex
end
end
function decode(source:string):string
var
i,ascii,strLen:integer
a:char
str:string
begin
strLen:=length(source)
result:=''
i:=1
while i<= strlen do
begin
str:=copy(source,i,2)
ascii:=strToint('$'+str)
a:=chr(ascii)
result:=result+a
inc(i,2)
end
end
end.
能看懂上面的代码,你就会了!
不知你要的是C语言的还是汇编的,都给你吧C语言的:
#include
<REG51.H>
typedef
unsigned
char
uchar
#define
NUMBER
10
uchar
BufferIn[NUMBER]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef,0x1a,0x1b}//16进制数存放区
uchar
BufferOut[2*NUMBER]
//ASCII码存放区
////////////////////////////////////////////////////////////////
//功能:
将多字节16进制数转换为ASCII字符
//入口:
x:待转换16进制数,x>=0且x<=F
//出口:
返回转换完成后的ASCII码字符数据,返回0为失败
////////////////////////////////////////////////////////////////
uchar
GetASCII(uchar
x)
{
if(x>0x0f)
{
return
0
}
if(x>9)
{
return
('A'+x-10)
}
return
('0'+x)
}
////////////////////////////////////////////////////////////////
//主程序
////////////////////////////////////////////////////////////////
void
main()
{
uchar
i
for(i=0i<NUMBERi++)
{
BufferOut[i*2]
=
GetASCII(BufferIn[i]/0x10)
BufferOut[i*2+1]
=
GetASCII(BufferIn[i]%0x10)
}
while(1)
}
汇编的:
说明:
LOOP1循环为预设10个16进制数内容的初始化程序,作为示例
ORG
0000H
LJMP
START
ORG
0100H
START:
MOV
R2,
#10
预置10个16进制数
MOV
R0,
#20H
16进制数存放起始地址
MOV
A,
#12H
LOOP1:
MOV
@R0,
A
ADD
A,
#13H
INC
R0
DJNZ
R2,LOOP1
循环10次送10个数
以上至START为初始化内存,预送10个字节的数据
MOV
R0,
#20H
16进制数存放起始地址
MOV
R1,
#30H
ASCII数存放起始地址
MOV
R2,
#10
转换10个字节
LCALL
HEXTOASC
调用转换子程序
JMP
$
=======================================================
HEXTOASC:将多字节16进制数转换为ASCII字符子程序
入口:
(R0)=16进制数存放起始地址指针
(R2)=字节数
出口:
(R1)=转换完成后的ASC字符存放起始地址指针
算法说明:0~9:(ASCII码为30H~39H)+90H后调整后无变化,结果
为9xH,再加40H为0DxH,调整 *** 作+60H后正好为3xH
A~F:(ASCII为41H~46H),+90H后为9xH,调整 *** 作+06H后
为01H~06H,再加40H调整后不变,正好为41H~46H
=======================================================
HEXTOASC:
MOV
A,
@R0
SWAP
A
ANL
A,
#0FH
处理高4位
ADD
A,
#90H
DA
A
ADDC
A,
#40H
DA
A
MOV
@R1,
A
保存高4位
INC
R1
MOV
A,
@R0
ANL
A,
#0FH
处理低4位
ADD
A,
#90H
DA
A
ADDC
A,
#40H
DA
A
MOV
@R1,
A
保存低4位
INC
R1
下一个16进制数
INC
R0
DJNZ
R2,
HEXTOASC
RET
END
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)