Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fonction pour lire un entier dans un tableau de bytes

3 réponses
Avatar
J-L
Bonjour,

Je lis un fichier avec un tableau d'octets.

byte[] fileContents;
fileContents = File.ReadAllBytes(@fileName);

Dans ce tableau, je cherche à obtenir une valeur représentant un
entier.
J'ai fais le code suivant:

private int GetIntValue(byte[] data, int offset)
{
return
data[offset] +
data[offset + 1] * 256 +
data[offset + 2] * 65536 +
data[offset + 3] * 16777216;
}

Je m'en sers comme ça:

int numberOfStrings = GetIntValue(fileContents, 8);


Mais je me dis qu'il existe sans doute une fonction en C# pour faire
ça.
Me trompès-je ?

:-)

3 réponses

Avatar
Agnain
J-L a écrit :
Bonjour,

Je lis un fichier avec un tableau d'octets.

byte[] fileContents;
fileContents = File.ReadAllBytes(@fileName);

Dans ce tableau, je cherche à obtenir une valeur représentant un entier.
J'ai fais le code suivant:

private int GetIntValue(byte[] data, int offset)
{
return
data[offset] +
data[offset + 1] * 256 +
data[offset + 2] * 65536 +
data[offset + 3] * 16777216;
}

Je m'en sers comme ça:

int numberOfStrings = GetIntValue(fileContents, 8);


Mais je me dis qu'il existe sans doute une fonction en C# pour faire ça.
Me trompès-je ?

:-)





Bonjour,


FileStream stream = new FileStream(filename);
BinaryReader reader = new BinaryReader(stream);

int value = reader.ReadInt32();

reader.Close();
stream.Close();


Et pour écrire la valeur il y a BinaryWriter =)
Avatar
Gilles Kohl [MVP]
On Wed, 09 Apr 2008 10:45:13 +0200, J-L wrote:

Bonjour,

Je lis un fichier avec un tableau d'octets.

byte[] fileContents;
fileContents = File.ReadAllBytes(@fileName);



Dans ce tableau, je cherche à obtenir une valeur représentant un
entier.
J'ai fais le code suivant:

private int GetIntValue(byte[] data, int offset)
{
return
data[offset] +
data[offset + 1] * 256 +
data[offset + 2] * 65536 +
data[offset + 3] * 16777216;
}

Je m'en sers comme ça:

int numberOfStrings = GetIntValue(fileContents, 8);


Mais je me dis qu'il existe sans doute une fonction en C# pour faire
ça.



Bon réflexe :-)

Voici deux techniques:

static void Main()
{
byte[] fileContents = new byte[] { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x23, 0xac, 0x68, 0x02 };

// #1
Console.WriteLine(BitConverter.ToInt32(fileContents, 8));

// #2
MemoryStream ms = new MemoryStream(fileContents);
// alternativement: ms = new FileStream(fileName, FileMode.Open);
BinaryReader br = new BinaryReader(ms);
br.BaseStream.Seek(8, SeekOrigin.Begin);

Console.WriteLine(br.ReadInt32());

Console.ReadKey();
}

La première consiste en une seule ligne - en principe, remplacez votre "GetIntValue" par "BitConverter".

La deuxième est peut-être utile si vous voulez lire le fichier directement a partir du disque: utilisez les méthodes de BinaryReader.

Amicalement,
Gilles.
Regards,
Gilles [MVP].

(Please reply to the group, not via email.
Find my MVP profile with past articles / downloads here:
http://www.gilleskohl.de/mvpprofile.htm)
Avatar
J-L
>> BitConverter.ToInt32(fileContents, 8)





ça, c'est pile-poil ce que je voulais. Merci.