Например, у меня есть следующий номер:Как включить бит в октабе, только если он равен 0?
0x FF 00 FF
Теперь, я хочу, чтобы 00 часть, чтобы быть 1, только если это 0. Нужно ли мне проверять каждый байт или есть немного-трик, который может быть используется здесь?
Пример:
У меня есть неподписанный длинный IP, и я хэш его с функцией строки, но функция завершается на нулевых байтов, так что мне нужно, чтобы установить все нулевые байты 1:
0x7F000001 (127.0.0.1, может быть 0x0100007F, но зависит от платформы в любом случае)
теперь, я хочу сделать 0 байт в них:
0x7F010101 (так он будет 127.1.1.1)
Это единственный способ сделать то, что я хочу, это
char ip_sz[5];
*(unsigned long*)ip_sz = ulong_ip;
if (!ip_sz[0]) ip_sz[0] = 1;
if (!ip_sz[1]) ip_sz[1] = 1;
if (!ip_sz[2]) ip_sz[2] = 1;
if (!ip_sz[3]) ip_sz[3] = 1;
?
Действительно, любопытство. Я не забочусь о производительности, потому что знаю, что компилятор все равно оптимизирует это.
Не могли бы вы объяснить на примере, что именно вам нужно? – SMA
Какой тип данных для этого? Мы говорим о битах 8-15 в интегральном типе? – Jon
ИЛИ это с '11'? Если это 1, он останется 1. – Maroun