怎么把一个字符串转换成16进制数据
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
怎么把一个字符串转换成16进制数据,然后再把16进制数转成字符串?
unit BinHexTools;
interface
function HexToBin(HexNr : string): string; //把十六进制字符串转换为二进制字符串
function HexC harToInt(HexToken : char):Integer; //转换一个十六进制字符为整数
function HexC harToBin(HexToken : char): string;//转换一个十六进制字符为二进制字符串function pow(base, power: integer): integer;//指数函数
function BinStrToInt(BinStr : string) : integer;//把二进制字符串转换为整数
function DecodeSMS7Bit(PDU : string):string;// 解码一个7-bit SMS (GSM 03.38) 为ASCII码function ReverseStr(SourceStr : string) : string; //反转一个字符串
implementation
uses sysutils, dialogs;
function HexC harToInt(HexToken : char):Integer;
begin
{if HexToken>#97 then HexToken:=Chr(Ord(HexToken)-32);
{ use lowercase aswell }
Result:=0;
if (HexToken>#47) and (HexToken<#58) then { chars 0....9 }
Result:=Ord(HexToken)-48
else if (HexToken>#64) and (HexToken<#71) then { chars A....F }
Result:=Ord(HexToken)-65 + 10;
end;
function HexC harToBin(HexToken : char): string;
var DivLeft : integer;
begin
DivLeft:=HexC harToInt(HexToken); { first HEX->BIN }
Result:='';
{ Use reverse dividing }
repeat { Trick; divide b y 2 }
if odd(DivLeft) then { result = odd ? then bit = 1 }
Result:='1'+Result { result = even ? then bit = 0 }
else
Result:='0'+Result;
DivLeft:=DivLeft div 2; { keep dividing till 0 left and leng th = 4 }
until (DivLeft=0) and (leng th(Result)=4); { 1 token = nibble = 4 bits }
end;
function HexToBin(HexNr : string): string;
{ only stringsize is limit of binnr }
var Cou nter : integer;
begin
Result:='';
for Cou nter:=1 to length(HexNr) do
Result:=Result+HexCharToBin(HexNr[Counter]); end;
function pow(base, power: integer): integer;
var counter : integer;
begin
Result:=1;
for counter:=1 to power do
Result:=Result*base;
end;
function BinStrToInt(BinStr : string) : integer;
var counter : integer;
begin
if length(BinStr)>16 then
raise ERangeError.C reate(#13+BinStr+#13+
'is not within the valid range of a 16 bit binary.'+#13);
Result:=0;
for counter:=1 to leng th(BinStr) do
if BinStr[C ounter]='1'then
Result:=Result+pow(2,leng th(BinStr)-cou nter); end;
function DecodeSMS7Bit(PDU : string):string;
var OctetStr : string;
OctetBin : string;
C harbin : string;
PrevOctet: string;
C ounter : integer;
C ounter2 : integer;
begin
PrevOctet:='';
Result:='';
for Cou nter:=1 to length(PDU) do
begin
if length(PrevOctet)>=7 then { if 7 Bit overflow on previous }
begin
if BinStrToInt(PrevOctet)<>0 then
Result:=Result+C hr(BinS trToInt(PrevOctet))
else Result:=R esult+'';
PrevOctet:='';
end;
if Odd(Cou nter) then { only take two nibbles at a time }
begin
OctetStr:=C opy(PDU,Cou nter,2);
OctetBin:=HexToBin(OctetStr);
C harbin:='';
for Cou nter2:=1 to leng th(PrevOctet) do
C harbin:=Charbin+PrevOctet[C ounter2];
for Cou nter2:=1 to 7-leng th(PrevOctet) d o
C harbin:=OctetBin[8-Cou nter2+1]+C harbin;
if BinStrToInt(Charbin)<>0 then Result:=R esult+C hr(BinStrToInt(C harBin)) else Result:=R esult+'';
PrevOctet:=C opy(OctetBin,1,leng th(PrevOctet)+1);
end;
end;
end;
function ReverseStr(SourceStr : string) : string;
var Cou nter : integer;
begin
Result:='';
for Cou nter:=1 to length(SourceStr) do
Result:=SourceStr[C ounter]+Result;
end;
16进制的就是STR ING类型的!
要完成此效果需要两个步骤
第一步:把如下代码加入到<head> 区域中
<SCRIPT LANGUAGE= "JavaScript ">
<!-- Begin
binary_numbers = new Array( "0000 ", "0001 ", "0010 ", "0011 ", "0100 ", "0101 ", "0110 ", "0111 ", "1000 ", "1001 ", "1010 ", "1011 ", "1100 ", "1101 ", "1110 ", "1111 ");
function toBinary(High, Low) {
var hiHex = "ABCDEF ";
if (Low < 10 ) {
LowNib = Low;
}
else {
LowNib = 10 + hiHex.indexOf(Low);
}
if (High < 10 ) {
HighNib = Hig h;
}
else {
HighNib = 10 + hiHex.indexOf(High);
}
eight_bits = binary_nu mbers[HighNib] + " " + binary_numbers[LowNib];
return eig ht_bits;
}
function Dec2Hex(Decimal) {
var hexChars = "0123456789ABCDEF ";
var a = Decimal % 16;
var b = (Decimal - a)/16;
hex = " " + hexC hars.charAt(b) + hexC hars.charAt(a);
L = hexC hars.charAt(a);
H = hexC hars.charAt(b);
return hex;
}
var symb ols = " !\ "#$%& '()*+ '-./0123456789:; <=> ?@ ";
function toAscii () {
var loAZ = "abcdefghijklmnopqrstuvwxyz ";
symb ols+= loAZ.toUpperCase();
symb ols+= "[\\]^_` ";
symb ols+= loAZ;
symb ols+= "{|}~ ";
var loc;
loc = symb ols.indexOf(d ocument.asciiform.Input.value);
if (loc > -1) {
Ascii_Decimal = 32 + loc;
return (32 + loc);
}
return(0); // If not in range 32-126 return ZERO
}
function getAscii(some_value) {
document.asciiform.toDec.value = toAscii();
document.asciiform.toHex.value = Dec2Hex(toAscii());
document.asciiform.binary.value = toBinary(H, L);
}
// End -->
</script>
第二步:把如下代码加入到<body> 区域中
<center>
<form name= "asciiform " onsubmit= "return false; ">
<table border=1> <tr> <td>
<center>
输入一个字符:
<inpu t size=1 name=Inpu t maxleng th=1 onC hange= "getAscii(this.value) ">
<p>
<inpu t type=bu tton value= "显示" onClick= "d ocument.asciiform.toDec.value=toAscii() "> </center>
<p>
<inpu t size=10 name=toDec onFocus= "this.blur() ">
ASCII码十进制输出<br>
<inpu t size=10 name=toHex onFocus= "this.blur() ">
ASCII码十六进制输出<br>
<inpu t size=10 name=binary onFocus= "this.blur() ">
ASCII码二进制输出
</td>
</tr>
</table>
</form>
</center>
<script>
function hexchange()
{
var hex,dec;
dec = parseFloat(FKeyPad.ReadOut.value);
hex = dec.toString(16);
window.alert( "该十进制数转成十六进制数为:"+ hex);
}
function octchange()
{
var oct,dec;
dec = parseFloat(FKeyPad.ReadOut.value);
oct = dec.toS tring(8);
window.alert( "该十进制数转成八进制数为:"+ oct); }
function binchange()
{
var bin,dec;
dec = parseFloat(FKeyPad.ReadOut.value);
bin = dec.toString(2);
window.alert( "该十进制数转成二进制数为:"+ bin); }
</script>。