我有一个0和1形式的二进制字符串336。我从变量获取值。假设字符串为010101010001111,变量值为3,那么我想要这样的字符串:111010101010001。
有可能吗?如何在PHP中完成?
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以尝试这样
$num = "010101010001111";
$shiftCount = 3;
$valueToReplace = 1;
echo substr(str_pad($num, strlen($num)+$shiftCount,$valueToReplace,STR_PAD_LEFT),0,-$shiftCount);
str_pad —用另一个字符串将字符串填充到一定长度
substr —返回字符串的一部分
strlen-获取字符串长度
pad_type
可选参数pad_type可以为 STR_PAD_RIGHT , STR_PAD_LEFT 或 STR_PAD_BOTH 。如果未指定pad_type,则假定为 STR_PAD_RIGHT 。
答案 1 :(得分:0)
您必须在此处进行一些 bit 操作
$decVal = bindec($string); // 010101010001111 --> 10895
总体思路是这样的:
将二进制字符串转换为十进制值。
$decVal
将$variable
值右移$decVal >> $variable // 010101010001111 --> 000010101010001
个位置。
$decVal
将strlen($string) - $variable
值向左移动$decVal << (strlen($string) - $variable) // 010101010001111 --> 010101010001111000000000000
个位置
AND
...0000000000111111111111111
使用(($decVal << (strlen($string) - $variable)) & ~(~0 << strlen($string))) // 010101010001111000000000000 & ...0000000000111111111111111 --> ...0000000000111000000000000
OR
($decVal >> $variable) | (($decVal << (strlen($string) - $variable)) & ~(($decVal | ~0) << strlen($string))) // 000010101010001 | ...0000000000111000000000000--> 111010101010001
步骤2和步骤4的输出以实现所需的结果
$result = decbin(...);
echo $result;
最后,以二进制字符串表示形式显示步骤5的输出。
const PIC = document.querySelector('picture');
const IMAGE = document.querySelector('img');
var widths = [200,400,800], mW = [250,450,451]
for (var i = 0; i < 3; i++) {
var source = document.createElement('source'); //created Source element
var media = '(max-width:'+mW[i]+'px)';
source.setAttribute('media', media); //Set its media attribute
//created srcset attribute
var imgSrc = IMAGE.getAttribute('src'); //Img src
// strip off last 8 chars of image name
imgSrc = imgSrc.slice(0, -8);
var srcset = imgSrc + '-' + widths[i] + '.jpg';
source.setAttribute('srcset', srcset);
var insert = PIC.insertBefore(source, PIC.firstChild);
}
console.log(PIC.outerHTML)