Я слышу два разных вопроса, где вы спрашиваете «Или это неправильно?»
Я слышу, как вы спрашиваете "как я могу обозначить байт разделителя в моем коде?", И я слышу, как вы спрашиваете "каков хороший выбор для байта разделителя?"
Сначала , в сущности, то, о чем вы спрашиваете, описано в разделе 6.4.4.4 спецификации языка C, который охватывает «Символьные константы C». Существуют различные места, где вы можете найти формальную спецификацию языка C или поискать «символьные константы C», чтобы найти более дружелюбное описание и т. Д.
Подробно, несколько букв могут использоваться в escape-последовательностях для замены отдельных байтов определенных значений; например, \n
- это один из них, в качестве замены для 0x0a
(десятичное число 10), байт, обозначенный (в ASCII) символом новой строки. Вот юридические:
\a \b \f \n \r \t \v
escape-последовательности \0
и \1
работают, потому что C поддерживает использование \
с последующими цифрами в качестве восьмеричного значения. Таким образом, это также будет работать, скажем, с \3
и \35
, но не с \9
, и обратите внимание, что \35
имеет десятичное значение 29. (Google "восьмеричные значения", если вы не сразу понять, почему это так.)
Существуют и другие допустимые escape-последовательности:
\' \" \\ \? : ' " \ and ?, respectively
\xNNNN... : each 'N' can be a hexadecimal digit
И, конечно же, escape-последовательности являются лишь одним аспектом символьных констант C.
Секунда , должен ли использовать данное значение байта в качестве разделителя разделов вашего файла, полностью зависит от того, как будет использоваться ваша программа. Как отмечали другие в комментариях, существуют распространенные практики о том, какое значение байта использовать для такого рода вещей.
Я лично согласен с тем, что 0x1e
имеет, пожалуй, самый большой смысл, поскольку в ASCII это "разделитель записей". Соответствие ASCII может иметь значение, если данные должны будут быть поняты другими программами, или если ваша программа должна быть понята другими людьми.
С другой стороны, простой комментарий к коду может дать понять любому, кто читает ваш код, какое значение байта вы используете для разделения разделов вашего файла данных, и любая программа, которая должна понимать ваши файлы данных, должна «знать» гораздо больше о формате файла, чем просто разделитель записей. В 0x1e
нет ничего волшебного: это просто соглашение и зарезервированное место в таблице ASCII, чтобы облегчить общую необходимость - то есть разделение записей текста, которое может содержать обычные разделители текста, такие как пробел, символ новой строки и ноль. .
В общем, любое значение байта, которое не будет отображаться в содержимом ваших разделов, могло бы стать хорошим разделителем разделов. Поскольку вы говорите, что это содержимое будет текстовым, существует более 100 вариантов, даже если вы исключите \0
(0x00
) и \n
(0x0a
). В ASCII для этих целей было выделено несколько байтовых значений, что помогает сократить выбор с нескольких десятков до нескольких. Даже среди этих нескольких, только несколько обычно используются в качестве разделителей.