Как сохраняется массив символов, если он инициализирован как Array [] = "testit" - PullRequest
1 голос
/ 20 июня 2020

У меня есть массив символов, инициализированный следующим образом

int main()
{
   char ptr1[] = "testit";
}

имеет эквивалент сборки

main:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-7], 1953719668   ; These lines form the string "testit"
        mov     WORD PTR [rbp-3], 29801         ; These lines form the string "testit"
        mov     BYTE PTR [rbp-1], 0             ; These lines form the string "testit"
        mov     eax, 0
        pop     rbp
        ret

Я хотел бы знать, как хранится массив символов? На что ссылаются эти числа (в сборке 1953719668 , 29801, 0) (или как эти числа рассчитываются)?

1 Ответ

2 голосов
/ 20 июня 2020

Первое число, 1953719668, также 0x74736574 преобразовано в шестнадцатеричное.

Записано в виде отдельных байтов с прямым порядком байтов, у нас есть 0x74, 0x65, 0x73, 0x74.

Используя ascii, мы имеем t, e, s, t.

Второе число кодирует "it" аналогичным образом, но только в 16 битах для 2 символов: 29801 = 0x7469, преобразовано в шестнадцатеричное, и в байты с прямым порядком байтов : 0x69, 0x74: i, t.

Последний байт - это нулевой завершающий байт, используемый C строками.

http://www.asciichars.com/_site_media/com_photogallery/ascii-chars/xl/ascii-chars-table-landscape.jpg

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...