2010-04-10 3 views
3

J'ai une chaîne contenant des données binaires (données non textuelles). Comment est-ce que je convertis ceci en tableau d'octets bruts?Chaîne au tableau d'octets bruts

+0

Puis-je demander où avez-vous eu une telle chaîne? –

+1

est votre base de chaîne encodée 64? – Ray

+0

binaire non-texte! = Chaîne: http://marcgravell.blogspot.com/2010/03/binary-data-and-strings.html –

Répondre

7

Une chaîne en C# - par définition - ne contient pas de données binaires. Il consiste en une séquence de caractères Unicode.


Si votre chaîne ne contient que des caractères Unicode dans le jeu de caractères ASCII (7 bits), vous pouvez utiliser Encoding.ASCII pour convertir la chaîne en octets:

byte[] result = Encoding.ASCII.GetBytes(input); 

Si vous avez une chaîne qui contient caractères Unicode dans la gamme u0000-u00ff et veulent les interpréter comme des octets, vous pouvez lancer les caractères à octets:

byte[] result = new byte[input.Length]; 
for (int i = 0; i < input.Length; i++) 
{ 
    result[i] = (byte)input[i]; 
} 
+0

Ok. Donc, je devrais probablement avoir une chaîne en premier lieu. Merci. – Joel

1

Voici une façon:

public static byte[] StrToByteArray(string str) 
{ 
    System.Text.ASCIIEncoding encoding=new System.Text.ASCIIEncoding(); 
    return encoding.GetBytes(str); 
} 
+0

Est-ce que l'encodage ASCII ne gâchera pas mes données? – Joel

+0

@Joel: ASCIIEncoding fonctionne si votre entrée contient uniquement des caractères dans la plage u0000 - u007f. Il lèvera une exception si la chaîne d'entrée contient un autre caractère. – dtb

0
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding(); 
byte[] theBytes = encoding.GetBytes("Some String"); 

Remarque, il existe d'autres formats d'encodage, vous voudrez peut-être utiliser.

+0

ne fonctionnera pas. Le contenu de la source est supposé en UTF-16, ce qui échouera sur certaines combinaisons de valeurs d'octets. –

5

Il est une très mauvaise idée de stocker des données binaires dans un chaîne. Toutefois, si vous devez absolument le faire, vous pouvez convertir une chaîne binaire en un tableau d'octets à l'aide de la page de codes 1252. N'utilisez pas la page de codes 0 ou vous perdrez des valeurs dans des langues étrangères. Il arrive juste que la page de code 1252 convertisse correctement toutes les valeurs d'octets de 0 à 255 en Unicode et vice-versa.

Certains programmes VB6 mal écrits utilisent des chaînes binaires. Malheureusement, certains sont tellement de lignes de code qu'il est presque impossible de tout convertir en tableaux byte() en une seule fois.

Vous avez été prévenu. À utiliser à vos risques et périls:

Dim bData() As Byte 
Dim sData As String 

'convert string binary to byte array 
bData = System.Text.Encoding.GetEncoding(1252).GetBytes(sData) 

'convert byte array to string binary 
sData = System.Text.Encoding.GetEncoding(1252).GetString(bData) 
+0

Vous ne pouvez pas utiliser CP1252 pour le caractère ''\ x80'', il est converti en'? '. – Abyx

+0

octet x80 convertit en valeur Unicode x20ac et vice-versa. Comment avez-vous eu un point d'interrogation? – Brain2000

+0

Peut-être que cela dépend du système. J'ai utilisé 'BitConverter.ToString (Encoding.GetEncoding (1252) .GetBytes (" \ x80 "))' et j'ai obtenu '3F'. Vous pouvez l'essayer sur ideone.com – Abyx