#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. Благодаря этому он наконец-то работает! (извините за позднее спасибо!)