Scrittura File in Esadecimale. AIUTO!!!!

mercoledì 01 agosto 2007 - 16.43

m.primius Profilo | Newbie

Salve a tutti,

Ho un problema a cui non riesco proprio a venirne a capo.

La mia esigenza è quella di scrivere un file con dei dati di vario tipo (String,Int16,Byte, ecc) provenienti da un DB Oracle 10g.
I dati recuperati devono essere scritti in formato esadecimale e devono rispettare delle dimensioni prestabilite.
Ho creato un progetto windows console in C# dove ho dichiarato delle classi che contengono le strutture che rispecchiano i dati da scrivere nel file.
Fin qui tutto Ok,
Grazie gli oggetti messi a disposizione dal Framework 2.0 si può facilmente aprire un file stream

FileStream fs = new FileStream(strOutputFilename, FileMode.Append);

poi aprire un binaryWriter

BinaryWriter w = new BinaryWriter(fs);

e procedere alla scrittura tramite

w.write(Mio valore);

Allora per le stringe mi sono creato una funzione che cicla sulla stringa e le converte in un array di byte.
Ma per i numerici le cose si complicano:

Se io ho a disposizione 4 byte per scrivere un numero qualunque (compreso tra le dimenzioni di un int32) diciamo ad esempio
270 sul file mi ritrovo scritto (01 0E 00 00)
Sempra evidente che il byte più significativi vengono messi a sinistra.
Ma se io avessi l'esigenza di una formattazione del tipo (00 00 01 0E) come faccio?

Grazie a tutti.

LukeProgrammer Profilo | Newbie

Prova vedi se facendo una cosa del genere il problema sparisce:

string n; n = Conversion.Hex(270); if (n.Length < 8) { for (int i = 0; n.Length != 8; i++) { n = "0" + n; } } label1.Text = n;

Spero di esserti stato utile

Ciao

PS. "Conversion.Hex()" fa parte del Namespace Microsoft.VisualBasic, prima di usare questo bisogna dare a C# il riferimento a questo namespace

***********************************
LukeProgrammer

m.primius Profilo | Newbie

Grazie per l'aiuto, ma questa che posterò è la soluzione più pulita.



private static void writeBigEndian(BinaryWriter bw, Int64 value)
{
writeBigEndian(bw, (Int32)((value >> 32) & 0xFFFFFFFFL));
writeBigEndian(bw, (Int32)((value) & 0xFFFFFFFFL));
}



private static void writeBigEndian(BinaryWriter bw, Int32 value)
{
bw.Write(new byte[]
{
(byte)((value >> 24) & 0xFF),
(byte)((value >> 16) & 0xFF),
(byte)((value >> 8) & 0xFF),
(byte)((value) & 0xFF)
});
}



private static void writeBigEndian(BinaryWriter bw, Int16 value)
{
bw.Write(new byte[]
{
(byte)((value >> 8) & 0xFF),
(byte)((value) & 0xFF)
});
}



Saluti

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5