AS3版本:函数是转换单个字符,如果是多个字符,需要确定生成的16进制长度,修改转换逻辑。
function asciiToHexNum(char:String):String {return char.charCodeAt(0).toString(16).toUpperCase();}asciiToHexNum("9");//39asciiToHexNum("胡");//80E1
做一个静态数组是否会更好static char* hexChar[255] = {"00", "01",.....,"0F",
"10", "11, ......"1F",..."F1", "F2", ..... "FF"}
<?phpfunction StrToHex($string){$hex= "";for($i=0;$i <strlen($string);$i++)$hex.=dechex(ord($string[$i]));
$hex=strtoupper($hex);return $hex;}function HexToStr($hex){$string= "";for($i=0;$i <strlen($hex)-1;$i+=2)$string.=chr(hexdec($hex[$i].$hex[$i+1]));
return $string;}
$a = StrToHex("你好 abc");var_dump($a);
$b = HexToStr($a);var_dump($b);?>
老唐,来晚了。上一个封装好的汇编版本的,转换速度应该快,刚写完且调试成功。只处理了0-9,a-f,A-F,若要处理其它字符,在其中添加判断分支。
#include "stdafx.h"
BYTE AsciiToHexNum(char szChar) //返回0为不正确的输入字符{BYTE nHex=0;
_asm{mov al,szCharcmp al,'0'
jb Invalid //小于'0'的字符不处理mov ah,al //假设在'0'-'9'之间sub ah,'0' //计算差距cmp al,'9'jbe transNum //确定在'0'-'9'之间cmp al,'A'jb Invalid //小于'A'不处理mov ah,al //假设在'A'-'F'之间sub ah,'A'-10cmp al,'F'jbe transUpper //确定在'A'-'F'之间cmp al,'a'jb Invalid //小于'a'不处理mov ah,al //设在'a'-'f'之间sub ah,'a'-10cmp al,'f'jbe transLow //确定在'a'-'f'之间
Invalid:mov ah,0jmp overtransNum:add ah,0x30jmp overtransUpper:add ah,0x37jmp overtransLow:add ah,0x57over:mov nHex,ah}return nHex;}
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){// TODO: Place code here.
//char szChar='B';char szChar='9';BYTE bHex=AsciiToHexNum(szChar);return 0;}
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(4)
AS3版本:
函数是转换单个字符,如果是多个字符,需要确定生成的16进制长度,修改转换逻辑。
function asciiToHexNum(char:String):String {
return char.charCodeAt(0).toString(16).toUpperCase();
}
asciiToHexNum("9");//39
asciiToHexNum("胡");//80E1
做一个静态数组是否会更好
static char* hexChar[255] = {"00", "01",.....,"0F",
"10", "11, ......"1F",
...
"F1", "F2", ..... "FF"}
<?php
function StrToHex($string)
{
$hex= "";
for($i=0;$i <strlen($string);$i++)
$hex.=dechex(ord($string[$i]));
$hex=strtoupper($hex);
return $hex;
}
function HexToStr($hex)
{
$string= "";
for($i=0;$i <strlen($hex)-1;$i+=2)
$string.=chr(hexdec($hex[$i].$hex[$i+1]));
return $string;
}
$a = StrToHex("你好 abc");
var_dump($a);
$b = HexToStr($a);
var_dump($b);
?>
老唐,来晚了。上一个封装好的汇编版本的,转换速度应该快,刚写完且调试成功。
只处理了0-9,a-f,A-F,若要处理其它字符,在其中添加判断分支。
#include "stdafx.h"
BYTE AsciiToHexNum(char szChar) //返回0为不正确的输入字符
{
BYTE nHex=0;
_asm
{
mov al,szChar
cmp al,'0'
jb Invalid //小于'0'的字符不处理
mov ah,al //假设在'0'-'9'之间
sub ah,'0' //计算差距
cmp al,'9'
jbe transNum //确定在'0'-'9'之间
cmp al,'A'
jb Invalid //小于'A'不处理
mov ah,al //假设在'A'-'F'之间
sub ah,'A'-10
cmp al,'F'
jbe transUpper //确定在'A'-'F'之间
cmp al,'a'
jb Invalid //小于'a'不处理
mov ah,al //设在'a'-'f'之间
sub ah,'a'-10
cmp al,'f'
jbe transLow //确定在'a'-'f'之间
Invalid:
mov ah,0
jmp over
transNum:
add ah,0x30
jmp over
transUpper:
add ah,0x37
jmp over
transLow:
add ah,0x57
over:
mov nHex,ah
}
return nHex;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
//char szChar='B';
char szChar='9';
BYTE bHex=AsciiToHexNum(szChar);
return 0;
}