【PHP VS Python】字节流与多进制转换
最近在做一些物联网相关的东西,需要在字节流与各种进制之间转换,着实踩了不少坑。˃PHP世界里极少出现“字节(流)”的概念:没有byte关键字(当然也没有char),官方文档也没提字
最近在做一些物联网相关的东西,需要在字节流与各种进制之间转换,着实踩了不少坑。
PHP 世界里极少出现 “字节 (流)” 的概念:没有 byte 关键字(当然也没有 char),官方文档也没提字节;没有原生的数组支持(常用的 array 其实是 hashtable );当然字符串 (string) 能表达其他语言中的字节数组 (Byte Array, byte [] )
所以在PHP眼中,其他的数据类型都用string或array来构造。尤其是一些透传数据,必须要将字节流做一些转换
。相较于PHP版本的转换,还需要自己写函数来实现,Python语言的就省事多了,只需要 hex 方法就可以做到。另外,在涉及到 base64加密
的相关函数,发现 java 的 base64 科技对字节数组进行加密,但 php 只能对字符串加密,它不接受以数组的形式传递参数。。。
PHP 版本
<?php
/**
* @param string $str [待处理字符串]
* @param boolean $encode [字符串转换为ASCII|ASCII转换为字符串]
* @param string $intType [2,8,16进制标示]
*/
function strtoascii($str, $encode=true, $intType="2"){
if($encode == true){
$byte_array = str_split($str);
foreach($byte_array as &$value){
$value = ord($value);
switch ($intType) {
case 16:
$value = sprintf("%02x", $value);
break;
case 8:
$value = sprintf("%03o", $value);
break;
default:
$value = sprintf("%08b", $value);
break;
}
}
unset($value);
$byte_str = implode('', $byte_array);
}else{
$chunk_size = $intType == 16 ? 2 : ($intType == 8 ? 3 : 8);
$byte_array = chunk_split($str, $chunk_size);
$byte_array = array_filter(explode("\r\n", $byte_array));
foreach($byte_array as &$value){
$fun_name = $intType == 16 ? 'hexdec' : ($intType == 8 ? 'octdec' : 'bindec');
$value = $fun_name($value);
$value = chr($value);
}
unset($value);
$byte_str = implode('', $byte_array);
}
return $byte_str;
}
$str = 'nice to meet you';
$str16 = strtoascii($str, true, 16);
echo $str16;
echo "\n";
echo strtoascii($str16,false,16);
Python 版本
import requests
r = requests.get('http://www.baidu.com')
content = r.content //以字节的方式访问请求响应体
print(content.hex()) // 将字节流转为16进制
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~