Увеличение / уменьшение байта (символа) в c ++ с избыточным / недостаточным потоком

Каков наилучший способ увеличения / уменьшения байта в c ++ с учетом переполнения и недостаточного заполнения? Например, у меня есть:

char c = random byte;
c += 0xB;

В случае с <= 0xF4, это будет хорошо работать, но любое значение выше, которое может вызвать переполнение. Аналогично, если бы это было c — = 0xB; и с < 0xB, будет происходить переполнение.

Скажем, c = 0xFF, после добавления это будет 0xA? Аналогично с понижением, если c = 0, будет ли результат 0xF5?

Кроме того, по некоторым странным причинам, когда я увеличиваю конкретные числа, появляются странные результаты. Например, если я увеличу 0x0 на 0xA, используя код:

c = (c + 0xA) & 0xFF;

результат: 0x0D 0x0A, а не просто 0x0A … как показано на следующем рисунке:
Инкремент Выпуск

Пока все остальные байты увеличиваются корректно.

-2

Решение

Я могу хотя бы объяснить ваши результаты с 0x0 by 0xA: В Windows символ новой строки в текстовых файлах обычно представлен в виде \r\n скорее, чем \n и функции файлового ввода-вывода помогут сделать этот перевод для вас. В этом случае вам не нужно преобразование, поэтому вы можете открыть файл в двоичном режиме, что приведет к запрету автоматического преобразования.

Что касается обработки переполнения, если вы можете использовать unsigned char вместо charгарантированно иметь четко определенную арифметику по модулю для переполнения и переполнения.

Если вам нужно обрабатывать потоки со знаком или недопустимо, вам придется тщательно кодировать всю логику, которую вы хотите.

1

Другие решения


По вопросам рекламы [email protected]