vb关于ascii码转换成6进制的问题.docx
《vb关于ascii码转换成6进制的问题.docx》由会员分享,可在线阅读,更多相关《vb关于ascii码转换成6进制的问题.docx(12页珍藏版)》请在冰豆网上搜索。
vb关于ascii码转换成6进制的问题
VB关于ASCII码转换成16进制的问题
悬赏分:
5-解决时间:
2008-10-2116:
01
有这样一团代码:
他能实现字符串转换成ASCII码16进制
但是我想让他实现ASCII码16进制转换成字符串谢谢各位大哥希望能有代码并且给出比较详细的说明我会追加积分的麻烦了!
~~
PrivateSubCommand1_Click()
DimA$,i%,B$
A=Text1.Text
Fori=1ToLen(A)
B=B&Hex(Asc(Mid(A,i,1)))
Next
Text2.Text=B
EndSub
建立两个文本框一个按钮
PrivateSubCommand1_Click()
DimA1%,B1$,i%,p%'定义变量
A1=Text1.Text'将输入的ASCII码赋值给A1
Fori=Len(A1)To1Step-1'循环
B1=Mid(UCase(A1),i,1)'取各位数字为了方便转为大写
p=Len(A1)-i'位权
SelectCaseB1'将16进制转为10进制
Case"A"
C=C+16^p*10
Case"B"
C=C+16^p*11
Case"C"
C=C+16^p*12
Case"D"
C=C+16^p*13
Case"E"
C=C+16^p*14
Case"F"
C=C+16^p*15
CaseElse
C=C+16^p*Val(B1)
EndSelect
Next
Text2.Text=Chr(C)'转换为字符
EndSub
以上是对你程序的修改的方法
其实完全可以很简单的
PrivateSubCommand1_Click()
DimA1%,B1$,i%,p%'定义变量
A1=Text1.Text'将输入的ASCII码赋值给A1
Text2.Text=Chr(Val("&H"&A1))'转换为字符利用数值转换
EndSub
试试效果是不是一样啊
求vb中将字符串转换为16进制的ascii码代码
悬赏分:
110-解决时间:
2008-2-2016:
46
ascii码为16进制形式的
字符串包含数字字母和汉字
问题补充:
得到的ascii码全部为大写、并且取值是从后往前
欢迎大家积极帮助积分定当顷囊相送
楼上的不是VB代码,不要乱贴啊
使用VB内部函数
Hex$(x)是把10进制的数字变成16进制
如y=Hex$(10)就是求10的十六进制数那么y=A
字母,数字,和汉字的asc码都只要用asc()这个函数就可以求出来了
你把问题写写清楚的话,我可以写下代码
OptionExplicit
Dimaa$,bb$,hexstr$,I&,S
PrivateSubCommand1_Click()
DimlenddAsInteger,nAsInteger
lendd=Len(Text2.Text)
Text3.Text=""
n=0
ForI=lenddTo1Step-1
n=n+1
Text3.Text=Text3.Text+Mid(Text2.Text,I,1)
Ifn=4ThenText3.Text=Text3.Text&"-":
n=0
NextI
EndSub
PrivateSubcommand2_Click()
aa=""
IfText1.Text=""ThenExitSub
ForI=1ToLen(Text1.Text)
aa=aa&CStr(ZFto16(Mid(Text1.Text,I,1)))
NextI
Text2.Text=Trim(aa)
Text1.Text=""
EndSub
PublicFunctionZFto16(hz$)AsString
Ifhz=""ThenExitFunction
ZFto16=Hex(Asc(hz))
EndFunction
PublicFunctionZF16toZF(hexstr$)AsString
Ifhz=""ThenExitFunction
ZF16toZF=Chr("&H"&hexstr)
EndFunction
其他回答 共2条
intchar2int(charch)
{
if(ch>='0'&&ch<='9')return(ch-'0');
if(ch>='a'&&ch<='f')return(ch-'a'+0xa);
if(ch>='A'&&ch<='F')return(ch-'A'+0xa);
return-1;
}
/*没处理非法字符,可以根据函数char2int()返回值处理*/
boolconvert(char*dst,char*src)
{
char*p=src;
char*q=dst;
intlen=strlen(src);
/*奇数长度,按右对齐方式处理*/
if(len%2)
{
*q++=char2int(*p++);
}
while(*p)
{
*q=char2int(*p++)<<4;
*q|=char2int(*p++)&0x0f;
q++;
}
returntrue;
}
看看好使不
void hex_to_ascii(unsigned char dat)
{
unsigned char dat_buff;
dat_buff = dat;
dat = dat&0x0f;
if((dat>=0)&&(dat<=9))
{
dat += 0x30;
}
else
dat += 0x37;UART_TX_buff[7] = dat;
dat = dat_buff;dat >>= 4;dat = dat&0x0f;
if((dat>=0)&&(dat<=9))
{
dat += 0x30;
}
else
dat += 0x37;UART_TX_buff[8] = dat;}
void ascii_to_hex(void)
{
unsigned char cnt,i;
for(cnt=0,i=0;cnt<6;cnt++,cnt++,i++)
{
Twi_Hex_Data[i] = Twi_ASCI_Data[cnt+1];//先放ASCII的高位(四位)
Twi_Hex_Data[i] <<= 4;
Twi_Hex_Data[i] += Twi_ASCI_Data[cnt];
}
}
#define Hex2Ascii(data) (data < 10)?
('0' + data) :
('A' + data - 10)
void Byte2ASCII(unsigned char data, unsigned char *pBuf)
{
unsigned char temp;
temp = data & 0x0F;
pBuf[1] = Hex2Ascii(temp);
temp = data >> 4;
pBuf[0] = Hex2Ascii(temp);
}这个短点
再加上两字节的:
#define Hex2Ascii(data) (data < 10)?
('0' + data) :
('A' + data - 10)
void Byte2ASCII(unsigned char data, unsigned char *pBuf)
{
unsigned char temp;
temp = data & 0x0F;
pBuf[1] = Hex2Ascii(temp);
temp = data >> 4;
pBuf[0] = Hex2Ascii(temp);
}
void Uint2ASCII(unsigned short data, unsigned char *pBuf)
{ unsigned char temp;
temp = (unsigned char)(data & 0x000F);
pBuf[3] = Hex2Ascii(temp);
data >>= 4;
temp = (unsigned char)(data & 0x000F);
pBuf[2] = Hex2Ascii(temp);
data >>= 4;
temp = (unsigned char)(data & 0x000F);
pBuf[1] = Hex2Ascii(temp);
data >>= 4;
temp = (unsigned char)(data);
pBuf[0] = Hex2Ascii(temp);
}
#define Ascii2Hex(data) (data >= '0' && data <= '9')?
(data - '0') :
((data >= 'A' && data <= 'F')?
(data - 'A' + 10) :
((data >= 'a' && data <= 'f')?
(data - 'a' + 10) :
0))
unsigned char ASCII2Byte(unsigned char *pBuf)
{
unsigned char temp;
unsigned char c;
c = *pBuf++;
temp = ((unsigned char)Ascii2Hex(c)) << 4;
c = *pBuf;
temp += Ascii2Hex(c);
return temp;
}
unsigned short ASCII2Uint(unsigned char *pBuf)
{
unsigned short temp;
unsigned char c;
c = *pBuf++;
temp = ((unsigned short)Ascii2Hex(c)) << 12;
c = *pBuf++;
temp += ((unsigned short)Ascii2Hex(c)) << 8;
c = *pBuf++;
temp += ((unsigned short)Ascii2Hex(c)) << 4; c = *pBuf;
temp += Ascii2Hex(c);
return temp;
}
DimstrAsString
DimdstAsString
str="4e"
str="&h"+str
dst=ChrW(Val(str))
OptionExplicit
PrivateSubCommand1_Click()
DimcHexAsString,SAsString,HexStrAsString
DimiAsLong
cHex="4e323830372e34303039324531323131332e3936313739"
Fori=1ToLen(cHex)Step2
S="&H"&Mid$(cHex,i,2)
HexStr=HexStr&Chr$(CLng(S))
Next
Debug.PrintHexStr
EndSub
OptionExplicit
PrivateSubCommand1_Click()
DimbyteHEX()AsByte
DimstrPAsString
DimintPAsInteger
strP=Text1.Text
intP=Len(strP)
IfintPMod2<>0ThenstrP="0"&strP'
intP=intP/2
ReDimbyteHEX(intP)
Text2.Text=""
ForintP=
我的函数是
PublicFunctionGbkStr(ByValssAsString)AsString
OnErrorResumeNext
DimxAsString
DimYAsVariant
DimiAsInteger
DimjAsIntegerReDimb(0To(Len(ss)/2))AsByte
j=0
Fori=1ToLen(ss)
x=Mid$(Trim(ss),i,2)
Y=CLng("&H"&x)
IfY<0ThenY=Y+65536
b(j)=Y
i=i+1
j=j+1
Nexti
GbkStr=StrConv(b,vbUnicode)
EndFunction请问具体该怎么做啊?
?
?
IfY<0ThenY=Y+65536再判断一下是否是不可显示的字符(H0~H20),如果是,则转成"."
我写的能显示中文,虽然有时有乱码.因为是写的共用函数里的部分,在调用时不需要使用,所以用了条件编译.CopyMemory是API函数,声明如下:
程序代码:
PublicDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(ByRefDestinationAsAny,ByRefSourceAsAny,ByValLengthAsLong)
程序代码:
#IftoolsThen
'工具显示16进制代码
WithForm1.Text3
DimtxjAsString
Dimtxj2AsString
Dimtxj3AsString
DimtxpAsBoolean
Dimtxj4AsInteger
Dimtxk
(1)AsByte
.Text="加密结果"&vbCrLf&" 000102030405060708090A0B0C0D0E0F"
Fori=0Tooptr-1
'.Text=.Text&vbcrlf&
txj=Hex(pout(i))
IfLen(txj)=1Thentxj="0"&txj
txj2=txj2&""&txj '这是生成16进制部分
Ifpout(i)<128Then '从这里开始是生成ASCII部分
Ifpout(i)>=32Then '可显示字符
txj3=txj3&Chr(pout(i))
Else
txj3=txj3&"."
EndIf
Else
IfNottxpThen '是否上一个字符输出时,取走了这个字符,否,输出中文
txk
(1)=pout(i)
txk(0)=pout(i+1)
CopyMemorytxj4,txk(0),2
txj3=txj3&Chr(txj4)
txp=True '设置取走了下一个字符
Else
txp=False
EndIf
EndIf
If(i+1)Mod16=0Then '换行,按每行16个字节排列
txj="0"&i\16
txj=String(4-Len(txj),"0")&txj
.Text=.Text&vbCrLf&txj&""&txj2&" "&txj3
txj2=""
txj3=""
EndIf
Nexti txj="0"&i\16 '最后一行的显示
txj=String(4-Len(txj),"0")&txj
.Text=.Text&vbCrLf&txj&""&txj2&Space(48-Len(txj2))&" "&txj3
EndWith
'工具输出结束
#EndIf
[C/C++]ASCII转HEX和HEX转ASCII算法
voidhex_to_ascii(unsignedchardat)
{
unsignedchardat_buff;
dat_buff=dat;
dat=dat&0x0f;
if((dat>=0)&&(dat<=9))
{
dat+=0x30;
}
else
dat+=0x37;
UART_TX_buff[7]=dat;
dat=dat_buff;
dat>>=4;
dat=dat&0x0f;
if((dat>=0)&&(dat<=9))
{
dat+=0x30;
}
else
dat+=0x37;
UART_TX_buff[8]=dat;
}
voidascii_to_hex(void)
{ unsignedcharcnt,i;
for(cnt=0,i=0;cnt<6;cnt++,cnt++,i++)
{
Twi_Hex_Data=Twi_ASCI_Data[cnt+1];//先放ASCII的高位(四位)
Twi_Hex_Data<<=4;
Twi_Hex_Data+=Twi_ASCI_Data[cnt];
}
}