Попытка отобразить строку ASCII, но она усечена

#c #hex

#c #шестнадцатеричный

Вопрос:

Я пытаюсь отобразить шестнадцатеричные символы в формате ASCII, но они усекаются после x00. Я понимаю, что x00 означает NULL, но есть ли способ как-то «пропустить» это значение и отобразить все шестнадцатеричные значения?

 int main () 
{
    const char* blob = "x31x00x32";
    std::cout <<"hexChar=" << blob  << std::endl; 
    return 0;
}
 

Вывод:
hexChar=1

Я хочу, чтобы выходные данные также включали последний символ, который равен 2 (0x32): hexChar=1 2

Возможно ли это?

Комментарии:

1. Вы всегда хотите печатать ровно три символа? Если нет, то как вы хотите определить количество напечатанных символов? (Почему бы не использовать std::string ?)

2. Привет! Не всегда будет 3 символа. Теперь я попытался использовать std::string, но по-прежнему не могу отобразить символ после x00 : (

3. Возможно ли использовать пользовательское представление hex в вашем большом двоичном объекте? скажите что-то вроде «hx31hx00hx32»?

4. @Kay Итак, как вы хотите определить, сколько символов выводить?

Ответ №1:

Проблема в том, что строка, заканчивающаяся нулем (это то, что все понимают как пустую const char * без явной длины), завершается нулем. Таким образом, ваша строка содержит только один символ, и печатается только один — 'x32' символ, находящийся в памяти, не является частью строки. По определению, такая строка не может содержать 'x00' символ, поскольку он завершает строку.

Вам нужно будет использовать какое-либо другое представление, которое может содержать NUL, например std::string :

 int main () 
{
    std::string blob("x31x00x32", 3);
    std::cout <<"hexChar=" << blob  << std::endl; 
    return 0;
}
 

Комментарии:

1. Благодаря этому он наконец-то работает! (извините за позднее спасибо!)