Шестнадцатеричный оператор in [] - PullRequest
0 голосов
/ 02 августа 2020

Я нашел какую-то статью и увидел это:

// Capture vendor string
char vendor[0x20];
memset(vendor, 0, sizeof(vendor));
*reinterpret_cast<int*>(vendor) = data_[0][1];
*reinterpret_cast<int*>(vendor + 4) = data_[0][3];
*reinterpret_cast<int*>(vendor + 8) = data_[0][2]; 

Эта строка: char vendor[0x20];. Почему три шестнадцатеричные числа и могу ли я использовать восьмеричное число?

CPUID

1 Ответ

2 голосов
/ 02 августа 2020

Почему три шестнадцатеричные

Потому что автор решил использовать шестнадцатеричный. Как видите, 0x20 в шестнадцатеричном формате является довольно «круглым», поскольку он имеет только один ненулевой di git.

Могу ли я использовать восьмеричное значение?

Да. Везде, где вы можете использовать целочисленный литерал, вы можете использовать любое из доступных базовых представлений. Возможные варианты: двоичное, десятичное, восьмеричное и шестнадцатеричное.

PS Этот пример технически нарушен в стандартном C ++, потому что не удается выровнять буфер, поэтому это не лучший пример для изучения языка. Мне кажется, что он написан специально для процессоров x86, которые действительно работают с невыровненными операциями.

Правильный способ написать это - использовать массив целых чисел, скопировать значения, а затем заново интерпретировать результат как символы при чтении.

...