2010-04-09 7 views
2

Je travaille avec une base de données d'une application héritée qui stocke 24 valeurs à virgule flottante (doubles) comme un tableau d'octets de longueur 192, soit 8 octets par valeur. Ce tableau d'octets est stocké dans une colonne de type image dans une base de données SQL Server 2005..net convertir bytearray en double []

Dans mon application .net, je dois lire ce tableau d'octets et le convertir en un tableau de type Double[24]. Je peux accéder au champ assez facile reader.GetBytes(...) mais comment convertir le ByteArray en Double[24]

Des idées?

Merci,

AJ

Répondre

4

Eh bien, comment est chaque ensemble de 8 octets représentés? Vous pouvez pouvoir utiliser Buffer.BlockCopy:

double[] doubles = new double[bytes.Length/8]; 
Buffer.BlockCopy(bytes, 0, doubles, 0, bytes.Length); 

ou vous devrez peut-être utiliser BitConverter.ToDouble à plusieurs reprises - ou une méthode de conversion personnalisée.

+0

Merci, chaque 8 octets est un double standard IEEE 754-1985. –

+0

@AJ: Dans quelle endianness? Je crois que les doubles ont une endianness interne, ce qui rend les comparaisons très simples. –

+0

Je ne suis pas sûr, un exemple des 8 premiers octets (en hexadécimal) est: 0000000000002840 –

0

force brute:

double[] doubles = new double[24]; 

for (int i=0; i < 24; i++) 
{ 
    for (int j=0; j < 8; j++) 
    { 
     doubles[i] += bytes[i*8 + j] << j*8; 
    } 
} 

si le endianness ne va pas, changer le dernier terme de j * 8 (7-j) * 8;