Вы должны понимать, как числа представлены в компьютере: когда вы читаете 2
на экране, то, что на самом деле хранится в памяти, это число 50.
Это код для символа 2
в таблице ASCII .
Фактическое число 2 не соответствует печатному символу, то есть символу, который вы можете прочитать на экране, поэтому различные текстовые редакторы, такие как Gedit, будутведут себя по-разному: некоторые будут отображать квадраты или точки, другие будут показывать число с некоторыми экранирующими символами '\'.
UTF-8 на самом деле обратно совместим с ASCII, так как он дает английский алфавит, цифры инекоторые другие символы имеют те же коды, что и ASCII.
Целочисленная переменная содержит фактическое число, с которым компьютер может выполнять вычисления, а не символы, которые вы, как человек, можете прочитать.
Если вы используете32-битная ОС, int
в C будет 32 бит или 4 байта.Поскольку вы, скорее всего, используете процессор x86, число будет повторно представлено в порядке little-endian .
Итак, когда вы записываете эти байты в файл с вашим кодом, файл будет выглядеть следующим образомна диске:
+---+---+---+---+
| 2 | 0 | 0 | 0 |
+---+---+---+---+
Gedit попытается прочитать его как 4 символа, но не сможет распечатать их, поэтому он покажет вам их значение, которому предшествует хартия '\', так что вы будете знать, что это специальныенепечатаемые символы.
Существует два способа использования write()
и получение нужного текстового представления.
Во-первых, вам необходим массив char
для создания строкового представления числа.
Затем вы можете сделать одну из двух вещей:
- Обман и использовать
sprintf
, чтобы легко отформатировать число в строку. - Выполните работусамостоятельно с циклом и некоторой простой математикой, и конвертируйте каждую десятичную цифру в номере в ее символ ASCII.
Вот подсказка: просто добавьте 0x30 (шестнадцатеричное 30)