2014-01-31 2 views
0

Предположим, я пишу следующую программу C и сохранить его в текстовом файле с именем hello.cУ двоичных файлов есть кодировка? Confused

#include<stdio.h> 
int main() 
{ 
    printf("Hello there"); 
    return 0; 
} 

Файл Hello.c, вероятно, спасаются в UTF8 закодированном формате.

Теперь я скомпилировать этот файл, чтобы создать двоичный файл с именем Hello

Теперь этот двоичный файл должен каким-то образом сохранять текст «Hello there». Вопрос в том, что кодировка используется для хранения этого текста?

+3

Файл сохраненного объекта будет иметь формат, который, вероятно, является проприетарным для компилятора или стандартизованного формата, такого как ELF. Строка будет храниться где-то там, где и как определяется компилятором. Итоговый исполняемый файл после окончательной компоновки будет иметь формат, определяемый операционной системой, на которой вы работаете. – Jimbo

ответ

1

Насколько я знаю, ваниль C не имеет понятия кодирования, хотя, если вы правильно отслеживаете многобайтные символы, вы, вероятно, можете использовать кодировку. По умолчанию ASCII используется для сопоставления символов однобайтовым символам.

Вы правильно указали строку «Hello there», которая хранится в самом исполняемом файле. Строковый литерал помещается в глобальную память и заменяется указателем на вызов printf, поэтому вы можете видеть строковый литерал в сегменте данных двоичного файла.

Если у вас есть доступ к шестнадцатеричному редактору, попробуйте компилировать свою программу и открыть двоичный файл в редакторе. Here - это скриншот от того, когда я это сделал. Вы можете видеть, что каждый символ строкового литерала представлен одним байтом, за которым следует 0 (NULL). Это ASCII.

Смежные вопросы