The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Переносимое использование типов а-ля int64_t, !*! scons, 15-Ноя-06, 08:13  [смотреть все]
  • Переносимое использование типов а-ля int64_t, !*! pup, 19:48 , 15-Ноя-06 (1)
    int write_uint64 (int fd, long long unsigned val)
    {
        unsigned char arr[8];
        int i;
        for (i = 0; i < 8; i ++) {
            arr[i] = val % 0x100;
            val /= 0x100;
        }
        return write (fd, arr, 8);
    }
    int read_uint64 (int fd, long long unsigned *val)
    {
        unsigned char arr[8];
        int i;
        int ret;
        if ((ret = read (fd, arr, 8)) != 8)
            return ret;
        *val = 0;
        for (i = 7; i >= 0; i --) {
            *val *= 0x100;
            *val += arr[i];
        }
        return ret;
    }

    с signed придётся чуть иначе играть... но принцип я изложил. ;)
    • Переносимое использование типов а-ля int64_t, !*! scons, 20:27 , 15-Ноя-06 (2)
      • Переносимое использование типов а-ля int64_t, !*! pup, 07:11 , 16-Ноя-06 (3)
        >>с signed придётся чуть иначе играть... но принцип я изложил. ;)
        >Смахивает на кривой велосипед. К слову, есть сдвиги и битовые операции :)

        угу, есть битовые операции... но я, честно говоря, на практике с hi-endian тачкой не сталкивался, не понимаю как такое может работать и, поэтому, предпочёл перестраховаться, уйдя от битов/байтов далеко-далеко =)
        а оптимизацией пускай компилятор занимается.

        >Собственно, вопрос был о безопасности использования sys/endian.h.

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру