php ASCII字符和十六進制數之間的相互轉化

一:ASCII字符轉化爲十六進制數php

在php中將ASCII字符轉化爲十六進制數使用到bin2hex函數函數

語法以下:code

bin2hex(string)

參數string爲須要轉化的ASCII字符orm

實例以下:ci

$str = 'I love中國';
$str = bin2hex($str);
echo $str;

輸出結果以下:字符串

49206c6f7665e4b8ade59bbd

這樣就是先了將ASCII字符轉化爲十六進制數input

二:十六進制數轉化爲ASCII字符string

在php中將十六進制數轉化爲ASCII字符使用到hex2bin函數,在php5中沒有bex2bin函數,這時候咱們能夠使用pack函數來將十六進制數轉化爲ASCII字符it

bex2bin函數語法以下:form

hex2bin(string)

參數string爲須要轉化的十六進制數

pack函數語法以下:

pack(format,args+)

參數說明:

format:必填,爲規定在包裝數據時所使用的格式,參數可選值以下:

a - NUL 填充的字符串
A - SPACE 填充的字符串
h - 十六進制字符串,低位在前
H - 十六進制字符串,高位在前
c - signed char
C - unsigned char
s - signed short(老是16位, machine 字節順序)
S - unsigned short(老是16位, machine 字節順序)
n - unsigned short(老是16位, big endian 字節順序)
v - unsigned short(老是16位, little endian 字節順序)
i - signed integer(取決於machine的大小和字節順序)
I - unsigned integer(取決於machine的大小和字節順序)
l - signed long(老是32位, machine 字節順序)
L - unsigned long(老是32位, machine 字節順序)
N - unsigned long(老是32位, big endian 字節順序)
V - unsigned long(老是32位, little endian 字節順序)
f - float(取決於 machine 的大小和表示)
d - double(取決於 machine 的大小和表示)
x - NUL 字節
X - 備份一個字節
Z - NUL 填充的字符串
@ - NUL 填充絕對位置

args+:非必填,爲規定被包裝的一個或多個參數

bex2bin函數將:十六進制數轉化爲ASCII字符實例以下

$str = '49206c6f7665e4b8ade59bbd';
$str = hex2bin($str);
echo $str;

輸出結果以下:

I love中國

可是執行hex2bin函數時可能會報以下錯誤:

hex2bin(): Hexadecimal input string must have an even length

出現如上錯誤的緣由可能有兩種:

1:咱們的十六進制數中可能有不是十六進制的字符

2:十六進制數的字符長度爲奇數

因此咱們能夠這樣寫:

$str = '49206c6f7665e4b8ade59bbd';
$str = @hex2bin($str);
if ($str) {
    echo $str;
} else {
    echo 0;
}

pack函數實現將十六進制數轉化爲ASCII字符實例以下:

$str = '49206c6f7665e4b8ade59bbd';
$str = pack("H*", $str);
echo $str;

如上這樣就是先了將十六進制數轉化爲ASCII字符

相關文章
相關標籤/搜索