7

Вопрос по c, c++ – Как «\ x» работает в строке?

Я пишу программу на C / C ++, которая включает помещение шестнадцатеричного представления числа в строку, и я не совсем понимаю, как\x работает. Я видел примеры, когда люди писали такие вещи, как "\ xb2". В таком случае, как программа узнает, хотите ли вы, чтобы шестнадцатеричное число b сопровождалось числом 2 или если вы хотите шестнадцатеричное число b2? Кроме того, когда он сохраняет это в памяти, он сохраняет & quot; \ x & quot; символы или это просто сохранить шестнадцатеричное представление?

4ответа

4

Как пример, строка"123\x45" хранится в шестнадцатеричном виде как31 32 33 45.

Согласно ответу Oli, самое длинное действительное значение после "x". используется.

\ X " не сохраняется Любая escape-последовательность не хранит символы, которые вы видите на экране, она сохраняет фактический указанный символ. Например, «\ n»; на самом деле хранится как символ перевода строки, 0x0A.

0

Перевод выполняется во время компиляции, поэтому каждая строка, которую вы вводите вручную в исходный код с\x и в конечном итоге это символ, который он представляет в двоичном коде. Если вы хотите сделать это во время выполнения, вам нужно будет вызвать функцию разбора, напримерstrtol() используя базу 16, передавая строку, содержащую гекс, и приводим ее к символу.

9

Из стандарта C99 (6.4.4.4):

Each octal or hexadecimal escape sequence is the longest sequence of characters that can constitute the escape sequence.

0

Когда вы используете escape-последовательность \ x внутри строки, данные, следующие за \ x, фактически сохраняются в ее двоичном представлении.

Таким образом, строка «ABC» эквивалентно строке "\ x414243"

Если вы хотите выдавать шестнадцатеричные значения в виде отображаемых символов, вам нужно использовать символ спецификатора формата% x или% X:

printf("%X%X%X", 'A', 'B', 'C');    // emits "414243"

Смотрите раздел1.2.6 и раздел1.2.7 справочного руководства по библиотеке C

Надеюсь, это объяснение поможет.

RelatedQuestions