Библиотека.NET для текстовых файлов фиксированной длины

Если Вы намереваетесь хранить произвольные двоичные данные, необходимо использовать unsigned char. Это - единственный тип данных, который, как гарантируют, не будет иметь никаких дополнительных битов по Стандарту C. Друг друга тип данных может содержать дополнительные биты в своем объектном представлении (который является тем, который содержит все биты объекта, вместо только тех, который определяет значение). Дополнительное состояние битов является неуказанным и не используется для хранения значений. Таким образом, при чтении использования char некоторые двоичные данные вещи были бы сокращены к диапазону значений символа (путем интерпретации только битов значения), но могут все еще быть биты, которые просто проигнорированы, но все еще являются там и читают memcpy. Во многом как дополнение битов в реальных объектах структуры. Тип unsigned char, как гарантируют, не будет содержать их. Это следует 5.2.4.2.1/2 (C99 TC2, n1124 здесь):

, Если значение объекта символа типа рассматривают как целое число со знаком при использовании в выражении значение CHAR_MIN должно совпасть со значением SCHAR_MIN, и значение CHAR_MAX должно совпасть со значением SCHAR_MAX. Иначе значение CHAR_MIN должно быть 0, и значение [1 110] должно совпасть со значением [1 111]. значение UCHAR_MAX должно равняться 2^CHAR_BIT − 1

От последнего предложения из этого следует, что нет никакого пространства, уехал в любые дополнительные биты. Если Вы используете char в качестве типа своего буфера, у Вас также есть проблема переполнения: Присвоение любого значения явно к одному такому элементу, который находится в диапазоне [1 115] биты - таким образом, можно ожидать, что такое присвоение будет в порядке - но не в диапазоне char, который является CHAR_MIN.. CHAR_MAX, такая реализация переполнения и причин преобразования определила результаты, включая повышение сигналов.

, Даже если бы какие-либо проблемы относительно вышеупомянутого, вероятно, не показали бы в реальных реализациях (был бы очень низкое качество реализации), Вы являетесь лучшими для использования правильного типа с начала вперед, которое является unsigned char.

Для строк, однако, предпочтительный тип данных char, который будет понят под функциями печати и строкой. Используя [1 121] в этих целях похож на неправильное решение мне.

Для получения дополнительной информации, читайте this proposal , которые содержат фиксацию для следующей версии Стандарта C, который в конечном счете потребует signed char не, имеют любые дополнительные биты также. Это уже включено в рабочий документ .

8
задан ProfK 18 September 2009 в 16:42
поделиться

1 ответ

С тех пор меня указали к этому коду синтаксического анализа на основе XML , а также к этому аналогичному проекту на CodeProject . Чем больше, тем лучше и ближе я подхожу к "идеальной" посадке.

2
ответ дан 6 December 2019 в 01:40
поделиться
Другие вопросы по тегам:

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