使用PHP以二进制形式保存十六进制数据无法正常工作
我正在学习PHP和文件,并试图编写一些将数据放入二进制文件的代码 这是我的密码: 写 阅读 缺少的字母如使用PHP以二进制形式保存十六进制数据无法正常工作,php,file,binary,hex,pack,Php,File,Binary,Hex,Pack,我正在学习PHP和文件,并试图编写一些将数据放入二进制文件的代码 这是我的密码: 写 阅读 缺少的字母如z、m、n或o在哪里 编辑6-3-14 7h36 am:如果可能,我希望.bin文件不是纯文本您正在尝试在char(C-无符号字符)指令中设置十六进制字符 echo "\t"; foreach( array('0x41', 65, 'a') as $o ) echo $o."\t"; echo "\n"; foreach( array('c*','C*','a*','A*','h*','H*'
z
、m
、n
或o
在哪里
编辑6-3-14 7h36 am:如果可能,我希望.bin文件不是纯文本您正在尝试在char(C-无符号字符)指令中设置十六进制字符
echo "\t";
foreach( array('0x41', 65, 'a') as $o )
echo $o."\t";
echo "\n";
foreach( array('c*','C*','a*','A*','h*','H*','v*','n*','S*') as $o ){
echo $o . "\t";
foreach( array(0x41, 65, "a") as $oo ) {
echo pack($o, $oo);
echo "\t";
}
echo "\n";
}
若你们运行这个程序,你们会很快看到pack是如何使用3个不同的a值(十六进制、十二进制和正常值)的
您必须使用h
指令来完成所需的任务
function writeToFile($data) {
$fp = fopen(FILENAME, 'wb');
$len = strlen($data);
for ($i = 0; $i < $len; ++$i) {
$hx = dechex(ord($data[$i]));
$result = fwrite($fp, pack("h*", $hx));
if(!$result) {
// show something
}
}
fclose($fp);
}
现在,创建字符串并写入文件:
$data = 'This should work properly, thanks for StackOverFlow!';
$len = strlen($data);
writeToFile($data);
然后读回:
echo readFromFile($len);
文件内容如下所示:
E<86><96>7^B7<86>öWÆF^Bwö'¶^B^G'ö^GV'Æ<97>Â^BG<86>^Væ¶7^Bfö'^B5G^V6¶ôgV'dÆöw^R
E7^B7öWÆF^Bwö^ B^GöGVÆBG^Væ7^BföB5G^V6ÆGVÆR
function writeToFile($data) {
$fp = fopen(FILENAME, 'wb');
$len = strlen($data);
for ($i = 0; $i < $len; ++$i) {
$hx = dechex(ord($data[$i]));
$result = fwrite($fp, pack("h*", $hx));
if(!$result) {
// show something
}
}
fclose($fp);
}
function readFromFile($lenght, $pos = 0) {
$return = '';
$fp = fopen(FILENAME, 'rb');
if(!$fp) {
// show something
}
$fseek = fseek($fp, $pos, SEEK_SET);
if($fseek == -1) {
// show something
}
$data = fread($fp, $lenght);
$data = unpack("h*", $data);
$arr = str_split(current($data), 2);
foreach($arr as $val) {
$return .= chr(hexdec($val));
}
return $return;
}
$data = 'This should work properly, thanks for StackOverFlow!';
$len = strlen($data);
writeToFile($data);
echo readFromFile($len);
E<86><96>7^B7<86>öWÆF^Bwö'¶^B^G'ö^GV'Æ<97>Â^BG<86>^Væ¶7^Bfö'^B5G^V6¶ôgV'dÆöw^R