Comment écrire des bits (pas des octets) dans un fichier avec C#, .net? Je suis prévenu coincé avec ça.
Modifier: Je suis à la recherche d'une autre façon que l'écriture juste tous les 8 bits comme un octetComment écrire des bits dans un fichier?
4
A
Répondre
6
La plus petite quantité de données que vous pouvez écrire en même temps est un octet.
Si vous devez écrire des valeurs de bit individuelles. (Comme par exemple un format binaire qui nécessite un drapeau de 1 bit, un entier de 3 bits et un entier de 4 bits); vous devez mettre en mémoire tampon les valeurs individuelles en mémoire et écrire dans le fichier lorsque vous avez un octet entier à écrire. (Pour la performance, il est logique de tamponner plus et d'écrire des morceaux plus gros dans le fichier).
0
Vous devrez utiliser bitshifts ou arithmétique binaire, comme vous ne pouvez écrire un octet à la fois, et non individuelle morceaux.
4
- accumuler les bits dans une mémoire tampon (un seul octet peut être considéré comme un « tampon »)
- lors de l'ajout d'un bit, de gauche déplacer le tampon et mettre le nouveau bit dans la position la plus basse en utilisant OR
- Une fois le tampon saturé, ajoutez-le au fichier
0
J'ai créé quelque chose comme ceci pour émuler un BitsWriter.
private BitArray bitBuffer = new BitArray(new byte[65536]);
private int bitCount = 0;
// Write one int. In my code, this is a byte
public void write(int b)
{
BitArray bA = new BitArray((byte)b);
int[] pattern = new int[8];
writeBitArray(bA);
}
// Write one bit. In my code, this is a binary value, and the amount of times
public void write(int b, int len)
{
int[] pattern = new int[len];
BitArray bA = new BitArray(len);
for (int i = 0; i < len; i++)
{
bA.Set(i, (b == 1));
}
writeBitArray(bA);
}
private void writeBitArray(BitArray bA)
{
for (int i = 0; i < bA.Length; i++)
{
bitBuffer.Set(bitCount + i, bA[i]);
bitCount++;
}
if (bitCount % 8 == 0)
{
BitArray bitBufferWithLength = new BitArray(new byte[bitCount/8]);
byte[] res = new byte[bitBuffer.Count/8];
for (int i = 0; i < bitCount; i++)
{
bitBufferWithLength.Set(i, (bitBuffer[i]));
}
bitBuffer.CopyTo(res, 0);
bitCount = 0;
base.BaseStream.Write(res, 0, res.Length);
}
}
Questions connexes
- 1. Comment écrire des données de bitset dans un fichier?
- 2. Comment écrire/lire des bits de/vers un flux? (C#)
- 3. Comment écrire des données dans un fichier texte dans BlackBerry?
- 4. En Java, comment écrire une image java.awt.image.BufferedImage dans un fichier png 8 bits?
- 5. Comment écrire des images dans un fichier vidéo?
- 6. Comment lire un fichier et écrire dans un fichier texte?
- 7. écrire à un fichier texte dans php
- 8. Ant, (plus) écrire dans un fichier
- 9. Symbian: Comment écrire HBufC * dans le fichier
- 10. Écrire du code PHP dans un fichier
- 11. Comment écrire une datarow dans un fichier xml
- 12. Comment écrire des données binaires dans un fichier pour pouvoir les lire rapidement?
- 13. comment écrire dans un fichier texte par programme C
- 14. Comment écrire une chaîne XML dans un fichier?
- 15. Comment écrire un lien vers un fichier public
- 16. Comment écrire des repères/marqueurs dans un fichier WAV dans .NET
- 17. Comment puis-je écrire des données dans un fichier dans l'espace de travail d'un BlackBerry JDE?
- 18. Chargement d'un processus 32 bits dans un environnement 64 bits
- 19. Écrire un QNetworkReply à un fichier
- 20. Comment compiler un fichier binaire 32 bits sur une machine Linux 64 bits avec gcc/cmake
- 21. Écrire un fichier GIF en Java
- 22. PHP écrire dans le fichier
- 23. écrire un BitSet dans un fichier en Java
- 24. Comment écrire des données d'accès au fichier excel
- 25. bits de dumping/octets dans un fichier en mode binaire
- 26. Comment écrire un fichier de contrôle du chargeur SQL pour charger des données dans plusieurs tables
- 27. Comment écrire des chaînes en tant que binaires dans un fichier?
- 28. Comment écrire l'esperluette dans un nœud attribué?
- 29. VBScript pour écrire une macro dans un fichier Excel
- 30. Écrire dans des fichiers groupés?
Malheureusement c'est ce que je m'attendais. Je voulais juste éviter le problème d'écrire un nombre de bits qui ne divisent pas par 8 mais je vais devoir le gérer – agnieszka