\x00
- это терминатор NUL;Фактически, \x00
- это просто еще один способ записи \0
.
Если у вас есть байтовые данные, содержащие встроенные NUL, вы не можете использовать NUL в качестве ограничителя, точка;вы должны хранить указатель на данные и размер данных, точно так же, как функции, работающие с «необработанными байтами» (например, memcpy
или fwrite
).
Что касается литералов, убедитесь, чтоВы инициализируете массив (а не просто берете указатель на него), чтобы иметь возможность получить его размер, используя sizeof
:
const char orig[] = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00";
Теперь вы можете использовать sizeof(orig)
, чтобы получитьего размер (который будет на один больше, чем число явно написанных символов, поскольку в конце есть неявный терминатор NUL);осторожно, поскольку массивы затухают, чтобы указывать практически на все доступные случаи, особенно при передаче функциям.