При распечатывании шестнадцатеричных значений символа* массив в C дает нечетные значения для двоичного входа

Я думаю Ваш на правильном пути с поблочным тестированием, и это - замечательный план улучшить надежность Вашего продукта.

, Хотя поблочное тестирование не собирается решать все Ваши проблемы при преобразовании приложения в различные платформы или даже различные операционные системы. Причина этого, поблочные тестирования процесса, идет до, раскрывают ошибки в Вашем приложении. Это просто бросает как много исходных данных, вообразимых в Вашу систему, и ожидает результата на другом конце. Как получение обезьяны к постоянно фунту на клавиатуре и наблюдении результатов (Бета-тестеры).

Для взятия его к следующему шагу с хорошим поблочным тестированием необходимо сфокусироваться на внутреннем дизайне приложения. Лучший подход, который я нашел, должен был использовать шаблон разработки или процесс проектирования, названный "программированием по контракту" или "Дизайном контракта". Другая книга, которая очень полезна для того, чтобы встроить надежность в Ваш базовый дизайн, была.

Отладка Процесса разработки: практические стратегии Остающихся Сфокусированных, Совершающих нападки Дат Поставки и Создание Твердых Команд.

В нашей группе разработчиков, мы смотрели очень тесно на то, что мы считаем ошибкой программиста, ошибкой разработчика, разрабатываем ошибку и как мы могли использовать и поблочное тестирование и также встраивание надежности в наш пакет программного обеспечения через DBC и следование совету отладки процесса разработки.

7
задан Kozaki 20 November 2009 в 22:12
поделиться

2 ответа

То, что вы видите, является результатом расширения знака из char в int , использование unsigned char * или приведение к unsigned char до выполнения преобразования в int (неявно?) должно решить вашу проблему.

9
ответ дан 6 December 2019 в 09:20
поделиться

В C символ рассматривается как значение со знаком, если вы не укажете его как беззнаковое. Кажется, что когда вы передаете параметры функции, когда параметр оказывается char, он «дополняется» до размера обычного целого числа. Если вы не догадаетесь компилятору, что это следует делать беззнаковым способом, 128 становится 0xFFFFFF80 и т. Д.

Таким образом, расширение знака происходит до того, как форматтер печати когда-либо смотрит на значение. Это означает, что

printf("%02X", (unsigned) input[i]);

не решит вашу проблему, поскольку значение input [i] будет расширено по знаку, поэтому все значения от 128 до 255 обрабатываются как от -127 до -1 и становятся от 0xFFFFFF80 до 0xFFFFFF, тогда cast, тогда как

printf("%02X", ((unsigned char *) input)[i] );

подойдет, но его трудно читать. Лучше всего в первую очередь сделать тип input [] символом без знака.

11
ответ дан 6 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: