Насколько велико целое число? - PullRequest
4 голосов
/ 15 октября 2010

Как правильно определить, сколько байтов равно int?и как мне записать int в дескриптор файла?

Вот пример ложного кода, который может прояснить, чего я пытаюсь достичь:

char *message = "test message";
int length = strlen(message);
int fd = open(file, O_CREAT|O_RDWR);
write(fd, length??, ??); // <--- what goes here
write(fd, message, length);

Мне все равноо независимости от платформы и порядке байтов, просто о том, что он может компилироваться на максимально возможном количестве платформ.

Ответы [ 4 ]

9 голосов
/ 15 октября 2010

sizeof(length) уходит в поле.

Предпочтительно использовать sizeof(int) на случай, если вы когда-нибудь измените тип length в будущем.

sizeof выражает, ну, в общем, размер типа данных, кратный sizeof(char), который всегда равен 1.

2 голосов
/ 15 октября 2010

sizeof (int) = 4 (в Linux, 32- и 64-битная архитектура x86)sizeof (long) - 4 на 32 бита, 8 на 64 бита (в Linux, архитектура x86-32 / 64)Незнаю про винду.

2 голосов
/ 15 октября 2010

sizeof ваш друг.

write(fd, &length, sizeof(int));
0 голосов
/ 15 октября 2010
write(fd, &length, sizeof(length));

Вы можете использовать sizeof с именами переменных или именами типов. В этом случае вы могли бы сделать sizeof(int).

Функция write берет адрес зоны памяти, которую вы хотите записать, поэтому вы используете оператор & (address of). Вам не нужно делать это для строки, потому что у вас уже есть указатель (char*).

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