Что лучший метод должен считать двойное из Двоичного файла, созданного в C?

Вам нужен сервер для этого. Загрузите все фотографии на сервер, и другие устройства могут загружать фотографии оттуда. Отправка огромных скриншотов занимает много времени, а для некоторых пользователей это стоит денег. TeamViewer и Skype делают следующее:

  • Использовать сильное сжатие (как JPeg200 или другое вейвлет-сжатие)
  • Сохранять только изменения из одного снимка экрана в другой или разбивать экран на блоки (например, 200x200 пикселей) и отправлять только те блоки, которые были изменены с момента последнего снимка экрана.

Есть много способов для этого. Вы можете использовать этот пример кода в качестве ссылки: https://github.com/Temasys/skylink-android-screen-sharing

5
задан gnosio 10 March 2009 в 23:58
поделиться

5 ответов

Я думаю, что Вы на самом деле читаете число правильно, но запутываетесь дисплеем. Когда я считал число из Вашего обеспеченного файла, я добираюсь"3.907985046680551e-14"-это почти, но не совсем обнулите (0.000000000000039 в расширенной форме). Я подозреваю, что Ваш код C просто печатает его с меньшей точностью, чем Python.

[Редактирование] я только что попытался читать файл в C, и я получаю тот же результат (хотя немного меньше точности: 3.90799e-14) (использующий printf (" %g", val)), таким образом, я думаю, является ли это значение неправильным, это произошло на стороне записи, а не чтении.

3
ответ дан 15 December 2019 в 01:11
поделиться

Вы могли уточнить, "не работал"? Команда отказывала? Данные выходили неправильно? Что на самом деле произошло?

Если разрушенная команда:

  • Совместно используйте вывод ошибок команды

Если данные просто вышли неправильно:

  • Системы, которые создают и считывают данные, имеют тот же порядок байтов? Если Вы - обратный порядок байтов, и другой прямой порядок байтов, то необходимо указать преобразование порядка байтов в строке формата.

  • Если порядок байтов этих двух компьютеров является тем же, как данные были записаны в файл, точно? Вы знаете? Если Вы делаете, то, что значение было записано в файл и каково было неправильное значение, которое Вы вынули?

1
ответ дан 15 December 2019 в 01:11
поделиться
  • f.read(8) мог бы возвратить меньше чем 8 байтов
  • Данные могли бы иметь другое выравнивание и/или порядок байтов:

    >>> for c in '@=<>':
    ...     print repr(struct.pack(c+'d', -1.05))
    ...
    '\xcd\xcc\xcc\xcc\xcc\xcc\xf0\xbf'
    '\xcd\xcc\xcc\xcc\xcc\xcc\xf0\xbf'
    '\xcd\xcc\xcc\xcc\xcc\xcc\xf0\xbf'
    '\xbf\xf0\xcc\xcc\xcc\xcc\xcc\xcd'
    >>> struct.unpack('<d', '\xbf\xf0\xcc\xcc\xcc\xcc\xcc\xcd')
    (-6.0659880001157799e+066,)
    >>> struct.unpack('>d', '\xbf\xf0\xcc\xcc\xcc\xcc\xcc\xcd')
    (-1.05,)
    
0
ответ дан 15 December 2019 в 01:11
поделиться

Во-первых, Вы попробовали рассол? Никто еще не показал кода Python... Вот некоторый код для чтения в двоичном файле в Python:

import Numeric as N
import array
filename = "tmp.bin"
file = open(filename, mode='rb')
binvalues = array.array('f')
binvalues.read(file, num_lon * num_lat) 
data = N.array(binvalues, typecode=N.Float)   

file.close()

Где f здесь указал 4-байтовое плавание с одинарной точностью, числа. Найдите любой размер, который Ваши данные на запись, и используйте это.

Для не двоичные данные Вы могли сделать что-то простое как это:

   tmp=[]
   for line in open("data.dat"):
                tmp.append(float(line))
1
ответ дан 15 December 2019 в 01:11
поделиться

Лучший метод должен был бы использовать текстовый ASCII-файл:

0.0
3.1416
3.90798504668055

в этом это было бы портативно и работало бы с любым видом реализации с плавающей точкой в известной степени.

Чтение необработанных двоичных данных с a doubleадрес памяти не является портативным вообще и обязан перестать работать в некоторой другой реализации.

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

По крайней мере код должен быть окружен серией ifs/ifdefs, проверяющего что представление памяти doubles используемый текущей машиной точно соответствует той, ожидаемой интерпретатором Python.

Написание такого кода было бы трудным, который является, почему я предлагаю легкое, чистое, портативное и человекочитаемое решение текста ASCII.

Это было бы моим определением "лучше всего".

-1
ответ дан 15 December 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: