如何使用C++ 将HEX 转化成ascii码

如何使用C++ 将HEX 转化成ascii码,第1张

实现方法:加结束符,去空格,再用atof转换;

参考例子如下:

#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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12057310.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存