
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.75] |
![]() |
|
Страницы: (2) 1 [2] все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Универсальная функция - рассчитана на всё. На составные типы не рассчитана недостаточно универсальная функция ![]() |
![]() |
Сообщ.
#17
,
|
|
По-хорошему универсальный код надо бы здесь было разместить, но тут чистый C, а там Плюсы. Так что в соседней теме.
|
Сообщ.
#18
,
|
|
|
Цитата Qraizer @ По-хорошему универсальный код надо бы здесь было разместить, но тут чистый C, а там Плюсы. Так что в соседней теме. Ну не нужно изобретать космический велосипед ![]() Такой указатель не знает о типах данных - это "беда/забота" пользующего. Это я и о бесполезности учета byte order в этом вопросе, в том числе. Нужен двоичный дамп - получи как есть. Что касается порядка битов в байте - для хранения порядок практически стандартизован на 99,99%. Есть крайне-крайне редкие исключения для некоторых древних систем или специфических архитектур, типа OpenXC. Тут, да, может быть косяк. Единственное, что остается и нужно учитывать - количество бит в байте. Просто напомню, что ТС просил универсальную функцию, никак не завязанную на конкретные типы или группы типов. |
Сообщ.
#19
,
|
|
|
Как же проще на ASM
![]() ![]() 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 Или еще короче, но не уверен, что быстрее ![]() ![]() 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 |
![]() |
Сообщ.
#20
,
|
|
Majestio, ну если так ставить вопрос, то в первом посту уже готовое решение. Но это не тот вопрос. А вот представление вещественных в бинарном виде интересно.
|