Discussion:
Binary file
(for gammel til at besvare)
per Juul Larsen
2016-05-14 08:32:20 UTC
Permalink
når jeg skriver til en binay fil som sådan
Open "Z:\test" For Binary As #9
Put #9, , VersionNumber

For i = 0 To List5.ListCount

If i <> 0 Then Put #9, , "ÿ"

If Len(List5) < 4 Then
Put #9, , CByte(Left(List5.List(i), 2))
Put #9, , CByte(Left(List5.List(i), 2))
End If

If Trim$(Len(List5.List(i))) > 3 Then
a = Hex(Mid(List5.List(i), 6, 5))
...

når det tallet 23870 skrives til filen således :
Put #9, , CInt(Mid(List5.List(i), 6, 5))

bliver tallet 23870 til "3E5D" Decimalværdien af HEX tallet "3E5D" = 15710 !!!
men resultatet skulle se sådan ud "5D3E" hvor decimalværdien = 23870 !
Der byttes rundt på værdien når jeg skrive til binærfilen. "

hvorfor ?

tallet 23870 udtrækker jeg fra en VB6 listbox.item som ser sådan ud
"10: 89 23870:3"
mvh
Andreas Andersen
2016-05-15 16:58:22 UTC
Permalink
Post by per Juul Larsen
når jeg skriver til en binay fil som sådan
Open "Z:\test" For Binary As #9
Put #9, , VersionNumber
For i = 0 To List5.ListCount
If i <> 0 Then Put #9, , "ÿ"
If Len(List5) < 4 Then
Put #9, , CByte(Left(List5.List(i), 2))
Put #9, , CByte(Left(List5.List(i), 2))
End If
If Trim$(Len(List5.List(i))) > 3 Then
a = Hex(Mid(List5.List(i), 6, 5))
...
Put #9, , CInt(Mid(List5.List(i), 6, 5))
bliver tallet 23870 til "3E5D" Decimalværdien af HEX tallet "3E5D" = 15710 !!!
men resultatet skulle se sådan ud "5D3E" hvor decimalværdien = 23870 !
Der byttes rundt på værdien når jeg skrive til binærfilen. "
hvorfor ?
tallet 23870 udtrækker jeg fra en VB6 listbox.item som ser sådan ud
"10: 89 23870:3"
Det handler om i hvilken rækkefølge bytes gemmes, den mindst betydende
byte er i dit eksempel gemt forrest, det hedder little endian. Den
omvendte rækkefølge hedder big endian. Se
https://en.wikipedia.org/wiki/Endianness
--
Andreas
per Juul Larsen
2016-05-15 19:34:28 UTC
Permalink
Post by Andreas Andersen
Post by per Juul Larsen
når jeg skriver til en binay fil som sådan
Open "Z:\test" For Binary As #9
Put #9, , VersionNumber
For i = 0 To List5.ListCount
If i <> 0 Then Put #9, , "ÿ"
If Len(List5) < 4 Then
Put #9, , CByte(Left(List5.List(i), 2))
Put #9, , CByte(Left(List5.List(i), 2))
End If
If Trim$(Len(List5.List(i))) > 3 Then
a = Hex(Mid(List5.List(i), 6, 5))
...
Put #9, , CInt(Mid(List5.List(i), 6, 5))
bliver tallet 23870 til "3E5D" Decimalværdien af HEX tallet "3E5D" = 15710 !!!
men resultatet skulle se sådan ud "5D3E" hvor decimalværdien = 23870 !
Der byttes rundt på værdien når jeg skrive til binærfilen. "
hvorfor ?
tallet 23870 udtrækker jeg fra en VB6 listbox.item som ser sådan ud
"10: 89 23870:3"
Det handler om i hvilken rækkefølge bytes gemmes, den mindst betydende
byte er i dit eksempel gemt forrest, det hedder little endian. Den
omvendte rækkefølge hedder big endian. Se
https://en.wikipedia.org/wiki/Endianness
--
Andreas
tak for dit svar...
det forklarer en hel del og timers grublen... måske kan byteswap gøre forskellen.
mvh pjl

Loading...