Autore Topic: [Risolto] Salvare Byte[] su file?  (Letto 1102 volte)

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
[Risolto] Salvare Byte[] su file?
« il: 16 Gennaio 2012, 17:33:12 »
Ho una variabile RxData As Byte[4] e vorrei salvarla in un file, in modo da aprirlo in seguito e trovarmi il contenuto in un altro array del tipo FileData As Byte[xy].

Se non ho capito male dovrei dapprima convertire Byte[] in uno stream, poi salvare lo stream in un file; solo che in rete c'è tanta documentazione ma nessun esempio, ci sto uscendo pazzo!

Allora, partendo da RxData, come utilizzo la funzione Byte[].Write()?
Come gli indico che l'array di partenza è RxData?
Poi posso salvare lo stream normalmente come nell'esempio?


  
Codice: [Seleziona]
DIM binaryFile AS File
  binaryFile = OPEN "usr.home/test.hex" FOR CREATE
  WRITE #binaryFile, Stream
  CLOSE #binaryFile

« Ultima modifica: 17 Gennaio 2012, 16:35:14 da El Berto »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.718
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #1 il: 16 Gennaio 2012, 19:40:39 »
Io farei così.

Se il vettore ha un numero fisso di elementi:
Codice: gambas [Seleziona]

Private RxData[4] As Byte

Public Sub Button1_Click()

Dim binaryFile As File
Dim j As Integer

  binaryFile = Open User.Home & "/miofile" For Create
  
  For j = 0 To 3
 ' come esempio inserisco il valore di j nel mio file:
    RxData[j] = j
  
    Write #binaryFile, RxData[j] As Byte   ' se non scrivo "As Byte" lo interpreta come stringa, e in questo caso dà errore
  Next

  Close #binaryFile
  
End




Se il vettore non ha un numero fisso di elementi:

Codice: gambas [Seleziona]

Private RxData As New Byte[]


Public Sub Button1_Click()

 Dim j As Integer
 Dim binaryFile As File
  
  For j = 0 To 3
 ' come esempio inserisco il valore di j nella variabile[]:
      RxData.add(j)
    Next

End


Public Sub Button2_Click()

Dim j As Integer

binaryFile = Open User.Home & "/miofile" For Create

 For j = 0 To 3
   Write #binaryFile, RxData[j] As Byte
  Next

  Close #binaryFile

End



Ma posso utilizzare anche il metodo Write() della variabile vettoriale:
Codice: gambas [Seleziona]
Private RxData As New Byte[]


Public Sub Button1_Click()

Dim j As Integer
  
  For j = 0 To 3
 ' come esempio inserisco il valore di j nella variabile[]:
      RxData.add(j)
    Next

End


Public Sub Button2_Click()

   Dim binaryFile As File

   binaryFile = Open User.Home & "/miofile" For Create

   RxData.Write(binaryFile, 0, RxData.Count)

   binaryFile.Close

End
  


In tutti e tre i casi nel file generato ho il seguente risultato:
00 01 02 03
« Ultima modifica: 02 Settembre 2014, 13:44:48 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #2 il: 17 Gennaio 2012, 09:01:57 »
Grazie!
Allora, infatti nel primo codice mi mette errore se lascio As Byte, ho appunto provato a togliere (come nel secondo caso) e in effetti riesco ad aprire il file con un hex editor!
Adesso mi tocca cercare come leggerlo.....  :)

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #3 il: 17 Gennaio 2012, 11:12:24 »
Ma che bella sorpresa!!!!!

Gambas lavora in LITTLE ENDIAN!!!!

Ma porca.....

Tratto da "A Beginner's guide to Gambas":

Citazione
OPEN File name FOR [ READ ] [ WRITE ] [ CREATE | APPEND ] [ DIRECT ]
[ WATCH ] [ BIG | LITTLE ] AS # Variable

Solo che se provo così, mi dice che c'è un FOR "inaspettato", quindi suppongo non sia una sintassi corrette (o meglio, di qualche vecchia versione).

Tuttavia non riesco a trovare traccia di funzioni di conversione BIG-LITTLE endian.....

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #4 il: 17 Gennaio 2012, 11:58:00 »
Risolto, ho trovato per caso il campo "ByteOrder" di un file...

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.718
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #5 il: 17 Gennaio 2012, 15:39:46 »
Allora, infatti nel primo codice mi mette errore se lascio As Byte, ho appunto provato a togliere (come nel secondo caso) e in effetti riesco ad aprire il file con un hex editor!

Scusami, ma tu hai Gambas-2 o Gambas-3 ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline El Berto

  • Grande Gambero
  • ***
  • Post: 148
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #6 il: 17 Gennaio 2012, 15:46:57 »
Penso sia 2....

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.718
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Salvare Byte[] su file?
« Risposta #7 il: 17 Gennaio 2012, 15:55:10 »
Penso sia 2....

Credo di sì, se ti ha dato errore con "As Byte" (come avevo scritto io). Questa è una variazione propria di Gambas-3...

e va be', l'importante è che hai risolto.....

...a proposito, metti [Risolto] nell'intestazione del tuo primo messaggio di questa discussione.... se no Ceskho  :police: ti fulmina  !    ;D
« Ultima modifica: 03 Marzo 2015, 17:49:40 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »