На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (2) 1 [2]  все  ( Перейти к последнему сообщению )  
> Универсальная функция перевода в двоичное представление на чистом С
    Цитата Qraizer @
    Универсальная функция не рассчитана на составные типы, да.

    Универсальная функция - рассчитана на всё. На составные типы не рассчитана недостаточно универсальная функция :lol:
      По-хорошему универсальный код надо бы здесь было разместить, но тут чистый C, а там Плюсы. Так что в соседней теме.
        Цитата Qraizer @
        По-хорошему универсальный код надо бы здесь было разместить, но тут чистый C, а там Плюсы. Так что в соседней теме.

        Ну не нужно изобретать космический велосипед :lol: Указатель на void и длина в байтах - уже рулят на 143%!

        Такой указатель не знает о типах данных - это "беда/забота" пользующего. Это я и о бесполезности учета byte order в этом вопросе, в том числе. Нужен двоичный дамп - получи как есть. Что касается порядка битов в байте - для хранения порядок практически стандартизован на 99,99%. Есть крайне-крайне редкие исключения для некоторых древних систем или специфических архитектур, типа OpenXC. Тут, да, может быть косяк. Единственное, что остается и нужно учитывать - количество бит в байте.

        Просто напомню, что ТС просил универсальную функцию, никак не завязанную на конкретные типы или группы типов.
          Как же проще на ASM
          ExpandedWrap disabled
                lea   rdx,        [buffer] ; Буфер куда будет производиться перевод. Должен быть не меньше чем 8 * bytesCount + 1
                lea   r8,         [source] ; Исходные данные
                movzx rcx,        dword [bytesCount] ; Длина данных в байтах
                jrcxz .void
             
            @@:
                movzx eax,        byte [r8 + rcx - 1]
             
            ; -Тут просто не хочется делать цикл на фиксированное число итераций-
                shl   eax,        1
                or    ah,         '0'
                mov   [rdx + 0],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 1],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 2],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 3],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 4],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 5],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 6],  ah
                shr   ah,         1
                shl   eax,        1
                mov   [rdx + 7],  ah
            ; -----------------------
             
                add   rdx,        8
                loop  @b
             
            .void:
                mov   byte [rdx], 0
                retn


          Или еще короче, но не уверен, что быстрее
          ExpandedWrap disabled
                lea   r8,         [source] ; Исходные данные
                lea   r9,         [buffer] ; Буфер куда будет производиться перевод. Должен быть не меньше чем 8 * bytesCount + 1
                movzx rcx,        dword [bytesCount] ; Длина данных в байтах
                jrcxz .void
             
            @@:
                movzx rdx,        byte [r8 + rcx - 1]
                mov   rax,        0x8040201008040201
                mul   rdx
                mov   rdx,        0x0101010101010101
                shr   rax,        7
                and   rax,        rdx
                mov   rdx,        '00000000'
                add   rax,        rdx
                mov   [r9],       rax
                add   r9,         8
                loop  @b
             
            .void:
                mov   byte [r9], 0
                retn
          Сообщение отредактировано: macomics -
            Majestio, ну если так ставить вопрос, то в первом посту уже готовое решение. Но это не тот вопрос. А вот представление вещественных в бинарном виде интересно.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,1921 ]   [ 16 queries used ]   [ Generated: 16.06.25, 21:50 GMT ]