Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > dk.edb.programmering > #12 > unrolled thread

Binary file

Started byper Juul Larsen <pjlarsen@gmail.com>
First post2016-05-14 01:32 -0700
Last post2016-05-15 12:34 -0700
Articles 3 — 2 participants

Back to article view | Back to dk.edb.programmering


Contents

  Binary file per Juul Larsen <pjlarsen@gmail.com> - 2016-05-14 01:32 -0700
    Re: Binary file Andreas Andersen <andreas2411@gmail.com> - 2016-05-15 18:58 +0200
      Re: Binary file per Juul Larsen <pjlarsen@gmail.com> - 2016-05-15 12:34 -0700

#12 — Binary file

Fromper Juul Larsen <pjlarsen@gmail.com>
Date2016-05-14 01:32 -0700
SubjectBinary file
Message-ID<a3474c37-dcef-4ef9-9dd0-f81f2ca9c61b@googlegroups.com>
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

[toc] | [next] | [standalone]


#13

FromAndreas Andersen <andreas2411@gmail.com>
Date2016-05-15 18:58 +0200
Message-ID<5738aab1$0$297$14726298@news.sunsite.dk>
In reply to#12
Den 14-05-2016 kl. 10:32 skrev 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))
>          ...
>
> 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"

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

[toc] | [prev] | [next] | [standalone]


#14

Fromper Juul Larsen <pjlarsen@gmail.com>
Date2016-05-15 12:34 -0700
Message-ID<f5ffd39b-7df4-4c19-8a8e-dbe119171b23@googlegroups.com>
In reply to#13
Den søndag den 15. maj 2016 kl. 18.58.27 UTC+2 skrev Andreas Andersen:
> Den 14-05-2016 kl. 10:32 skrev 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))
> >          ...
> >
> > 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"
> 
> 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

[toc] | [prev] | [standalone]


Back to top | Article view | dk.edb.programmering


csiph-web