Php 如何将数组(包含真值和假值)转换为二进制字符串并转换为ASCII字符?
我有一个按数组排列的权限列表,例如:Php 如何将数组(包含真值和假值)转换为二进制字符串并转换为ASCII字符?,php,arrays,string,binary,ascii,Php,Arrays,String,Binary,Ascii,我有一个按数组排列的权限列表,例如: $permissions = array(true, true, false, false, true, ...); 我的目的是将数组转换为1和0的链: $pseudo_binary = array_to_binary($permissions); //011001000110111101100111 然后将该字符串视为二进制数,并作为ASCII字存储在数据库中: $ascii = binary_to_word($pseudo_binary); //do
$permissions = array(true, true, false, false, true, ...);
我的目的是将数组转换为1和0的链:
$pseudo_binary = array_to_binary($permissions); //011001000110111101100111
然后将该字符串视为二进制数,并作为ASCII字存储在数据库中:
$ascii = binary_to_word($pseudo_binary); //dog
array-to-binary()方法并不重要,我使用一个简单的foreach。但我请求帮助进行这些转换:
(字符串)“011001010111101100111”-->“狗”
“狗”---->(字符串)“011001011011011011011011011”
这应该适合您: 首先,我使用并替换每个元素
TRUE
->1
,FALSE
->0
。然后我把它编成一条线
在此之后,我简单地将字符串转换为8位(1字节)的数组。然后,我使用数组映射()循环遍历每个数组元素,将二进制文件转换为dec with,然后使用获取其字符。(还要注意,我过去常常确保每个元素有8位,否则我会用0填充它)
代码:
你试过什么吗?我发现的是如何处理一个二进制数,而不是一个表示二进制数的字符串。问题,为什么我必须将字符串拆分为一个8个字符的数组?我不能将字符串作为一个整体运行吗?@Srinichr()
仅用于1个字符,因此每个ASCII字符对应1个字节。啊,bindec()。首先,我有点不好意思知道有一个功能。但有时很难找到合适的文档。非常感谢您的回答,它非常完美。
<?php
//Equivalent to: 011001000110111101100111
$permissions = [FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, TRUE];
$binaryPermissionsString = implode("", array_map(function($v){
return $v == TRUE ? 1 : 0;
}, $permissions));
$binaryCharacterArray = str_split($binaryPermissionsString, 8);
$text = implode("", array_map(function($v){
return chr(bindec(sprintf("%08d", $v)));
}, $binaryCharacterArray));
echo $text;
?>
dog