zapisywanie liczb do pliku binarnego - i odczytanie go z innego programu

0

Cześć. Mam takie pytanie:
Mam jeden program, który zapisuje pewne dane do pliku binarnego. Program ten napisany jest np. w C# lub Javie lub innym języku.
Następnie chcę wykorzystać ten plik w innym programie, który jest napisany w jeszcze innym języku - np. C++, PHP etc.
Czy jest związane z tym jakieś niebezpieczeństwo?

Zdaje się, że niektóre kompilatory i/lub języki programowania mogą mieć różne wielkości bitów dla różnych zmiennych.

Teraz zastanawiam się czy:

  1. jeśli oba języki/programy będą przypisywać danej zmiennej taką samą ilość bitów to czy mimo wszystko wiąże się z tym jakieś niebezpieczeństwo, że wartość zapisana w pliku zostanie źle odczytana przez ten drugi program?
  2. jeśli oba programy deklarują zmienne w zupełnie innej wielkości bitów to czy będę mógł jakoś odczytać taką liczbę w drugim programie? Oczywiście zakładam, że ta liczba nie przekroczy wartości maksymalnej w obu programach.

Jeśli są z tym związane jakieś problemy to jakie i czy da się je jakoś ominąć?

Na koniec zaznaczę, że liczby przechowywane w plikach są typu float i/lub double.

Zastanawiam się również czy jeśli byłyby z tym jakieś kłopoty to czy pomogłoby zapisanie tych liczb w jednym programie np. do bazy danych i odczytanie ich z drugiego programu.
Inna opcja to skorzystanie z pliku CSV - w postaci stringa(?)

Co o tym myślicie?

0
  1. Tak, bo może to być kodowanie little lub big endian
  2. Oczywiście że tak, musisz po prostu napisać funkcję która te bajty "rozkoduje"
  3. Z bazami danych problemów nie będzie bo tam te "konwersje" są już zaimplementowane
  4. CSV albo jakis tekstowy format będzie ok, ale będzie znacznie znacznie wolniejszy.
0

Dzięki Shalom!
A czy odnośnie punktu 2, mógłbyś mnie jeszcze nakierować jak taka funkcja rozkodywująca mogłaby funkcjonować w języku C++?
Szczególnie odnośnie sytuacji, gdzie w pierwszym programie liczby są zapisywane na większej ilości bitów niż w tym drugim...
pozdrawiam!

0

Nie ma uniwersalnego sposobu rozkodowywania. Ba, nie ma nawet jednolitego sposoby przechowywania liczb zmiennoprzecinkowych dla różnych architektur w przypadku C++. Przynajmniej jeśli chodzi o long double. Bo float i double są opisane w IEEE754 ale long double to inna bajka, czasem jest potrójnej precyzji (12 bajtów) a czasem poczwórnej (16 bajtów)
Musisz po prostu wiedzieć w jaki sposób dana liczba jest zapisana i to jakoś wyliczyć ;]

0

Uuu, to nie dobrze :(
W takim razie pozostaje zapisanie danych w pliku CSV lub bazie danych -> odczytanie ich w drugim programie i ewentualnie zapisanie ich jeszcze raz, tym razem binarnie, by program szybciej odczytywał później te dane...
dzięki!
pozdrawiam

0

Ale dlaczego się tym tak bardzo przejmujesz? Przyjmij jeden standard, trzymaj się go i jeżeli chcesz, by inni programiści mogli odtworzyć twój plik - daj im znać w jaki sposób zapisane są dane. Działa to na dokładniej tej samej zasadzie co zapisanie tych liczb w pliku CSV (obiecujesz, że zapiszesz liczby dziesiętnie jako tekst) czy w bazie danych (hej, liczby będą zwracane jako little endian). Połowa rzeczy w informatyce i wszystkie protokoły bazują na tym, że jedna osoba coś obieca, żeby druga z tego mogła skorzystać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1