В некоторых PHP мне нужно сравнить две строки, но только по битам, которые установлены как один в битовой маске. Как бы я реализовал такое поведение?
Я пробовал:
$string1='aaabbb';
$string2='ababbb';
$bitmask='101101';
function compare($string1, $string2, $bitmask){
$resultBitmask=(~($string1 ^ $string2)|~$bitmask);
}
Для ясности я записал ff
байта как 1
в битовой маске для иллюстративных целей. На самом деле они будут ff
в шестнадцатеричном формате при создании битовой маски. То же самое касается 0
нулевых байтов.
Строка и битовая маска всегда имеют разную длину при каждом вызове функции. Мне удалось получить набор бит для сравнения, но я не могу проверить, все ли они установлены, так как длина различается. В настоящее время я использую preg_match
с регулярным выражением, которое соответствует любому количеству ff
байтов, но есть ли более элегантное решение?
Редактировать: поскольку строки имеют длину до 4096 бит, их нельзя преобразовать в числа.