J'écris un convertisseur de numéro. Comment puis-je convertir un entier en une chaîne binaire en C # sans utiliser de fonctions intégrées ( convert.tostring code> différentes choses basées sur la valeur donnée)? P>
8 Réponses :
Au moins une partie de la solution consiste à utiliser Vous pouvez trouver le Je ne suis pas sûr de savoir comment aller d'octets à la décimale, cependant. P>
Mise à jour: strong> Sur la base de la mise à jour de l'auteur: p>
decimal.GetBits (someValue) code> pour convertir le nombre décimal en sa représentation binaire. P>
bitconverter.getbytes code> peut être utilisé, à son tour, sur les éléments renvoyés par
décimal.getbits () code> pour convertir des entiers en octets. P>
décimal.getbits ( ) code> Documentation
utile. P>
bitconverter code> contient des méthodes permettant de convertir des numéros en octets, qui convient parfaitement à la représentation binaire. Les
getBytes () code> et
toint32 () code> Les méthodes sont pratiques pour les conversions dans chaque direction. La pratique de surcharges
ToString () code> pour créer une représentation de chaîne hexadécimale si vous constaterez que plus facile à interpréter comme 1 et 0. P>
Si BitConverterTer.getBytes peut transformer des bits en octets, puis aller d'octets à l'intent, c'est juste BitConverter.get32 (octets d'octets)
@Jimmy - merci. Le lien manquant pour moi est de comprendre comment convertir dans le type code> décimal code> à partir d'une gamme d'octets ou d'une matrice de Int32.
Ceci est une implémentation dangereuse:
private static unsafe decimal GetDecimal(Byte[] bytes) { if (bytes == null) throw new ArgumentNullException("bytes"); if (bytes.Length != sizeof(decimal)) throw new ArgumentOutOfRangeException("bytes", "length must be 16"); decimal d = 0; byte* dp = (byte*)&d; byte[] result = new byte[sizeof(decimal)]; for (int i = 0; i < sizeof(decimal); i++, dp++) { *dp = bytes[i]; } return d; }
Vous pouvez construire les représentations chiffres par chiffre des premiers principes. P>
Vous ne savez pas quelles fonctions intégrées que vous ne voulez pas utiliser, mais vous pouvez probablement construire un caractère de chaîne par caractère? P>
Pour son complément et son complément, Calculez ceux qui ont une étape supplémentaire . < / p>
ou est ainsi trop basique pour ce dont vous avez besoin? P>
Presque tous les ordinateurs utilisent aujourd'hui la représentation du complément de deux deux en interne, donc si vous faites une conversion directe comme celle-ci, vous obtiendrez la chaîne de complément des deux:
if (x < 0) x--; string onec = Convert(x);
Voici une solution élégante:
SIMPLE SOUTION:
IntToBinValue = Convert.ToString(6, 2);
C'est de loin la réponse la plus simple que j'ai trouvée!
Malheureusement, cela ne semble pas fonctionner pour des types non signés ...
var a = Convert.ToString(4, 2).PadLeft(8, '0');
Voici le mien: (La partie supérieure convertissait une chaîne binaire 32-Char en entier 32 bits, la partie inférieure convertie entier 32 bits en arrière à la chaîne binaire 32-Char). J'espère que cela aide.
string binaryString = "011100100111001001110011"; int G = 0; for (int i = 0; i < binaryString.Length; i++) G += (int)((binaryString[binaryString.Length - (i + 1)] & 1) << (i % 32)); Console.WriteLine(G); //â7500403⬠binaryString = string.Empty; for (int i = 31; i >= 0; i--) { binaryString += (char)(((G & (1 << (i % 32))) >> (i % 32)) | 48); } Console.WriteLine(binaryString); //00000000011100100111001001110011
Correction de bugs mineure pour le caractère le plus à gauche de la chaîne binaire pour un nombre négatif. Devrait être (uint) g & (1 code> au lieu de
g & (1 code>. Il ressemble à
bilarystring + = (((((((((((char) & (1 << (I% 32))) >> (I% 32)) | 48); code> sans correction de bugs, cela fonctionne toujours bien pour un nombre positif.