Chaîne en binaire en C#

j'ai une fonction pour convertir la chaîne en hexadécimal,

public static string ConvertToHex(string asciiString)
{
    string hex = "";
    foreach (char c in asciiString)
    {
         int tmp = c;
         hex += String.Format("{0:x2}", (uint)System.Convert.ToUInt32(tmp.ToString()));
    }
    return hex;
}

pourriez-vous m'aider à écrire une autre chaîne de caractères à une fonction binaire basée sur ma fonction d'échantillon?

public static string ConvertToBin(string asciiString)
{
    string bin = "";
    foreach (char c in asciiString)
    {
        int tmp = c;
        bin += String.Format("{0:x2}", (uint)System.Convert.????(tmp.ToString()));
    }
    return bin;
}
20
demandé sur splattne 2011-04-14 17:57:14

4 réponses

Ici, vous allez:

public static byte[] ConvertToByteArray(string str, Encoding encoding)
{
    return encoding.GetBytes(str);
}

public static String ToBinary(Byte[] data)
{
    return string.Join(" ", data.Select(byt => Convert.ToString(byt, 2).PadLeft(8, '0')));
}

// Use any sort of encoding you like. 
var binaryString = ToBinary(ConvertToByteArray("Welcome, World!", Encoding.ASCII));
35
répondu Jaapjan 2014-10-03 10:38:28

on dirait que vous voulez essentiellement prendre une chaîne ASCII, ou de préférence, un octet [] (comme vous pouvez encoder votre chaîne à un octet [] en utilisant votre mode d'encodage préféré) dans une chaîne de uns et de zéros? c'est à dire 101010010010100100100101001010010100101001010010101000010111101101010

Ce ne sera que pour vous...

//Formats a byte[] into a binary string (010010010010100101010)
public string Format(byte[] data)
{
    //storage for the resulting string
    string result = string.Empty;
    //iterate through the byte[]
    foreach(byte value in data)
    {
        //storage for the individual byte
        string binarybyte = Convert.ToString(value, 2);
        //if the binarybyte is not 8 characters long, its not a proper result
        while(binarybyte.Length < 8)
        {
            //prepend the value with a 0
            binarybyte = "0" + binarybyte;
        }
        //append the binarybyte to the result
        result += binarybyte;
    }
    //return the result
    return result;
}
9
répondu series0ne 2012-05-25 09:49:56

ce qui suit vous donnera l'encodage hex pour le byte bas de chaque caractère, qui ressemble à ce que vous demandez:

StringBuilder sb = new StringBuilder();
foreach (char c in asciiString)
{
    uint i = (uint)c;
    sb.AppendFormat("{0:X2}", (i & 0xff));
}
return sb.ToString();
1
répondu Jim Mischel 2011-04-14 14:47:25

Voici une fonction d'extension:

        public static string ToBinary(this string data, bool formatBits = false)
        {
            char[] buffer = new char[(((data.Length * 8) + (formatBits ? (data.Length - 1) : 0)))];
            int index = 0;
            for (int i = 0; i < data.Length; i++)
            {
                string binary = Convert.ToString(data[i], 2).PadLeft(8, '0');
                for (int j = 0; j < 8; j++)
                {
                    buffer[index] = binary[j];
                    index++;
                }
                if (formatBits && i < (data.Length - 1))
                {
                    buffer[index] = ' ';
                    index++;
                }
            }
            return new string(buffer);
        }

Vous pouvez l'utiliser comme:

Console.WriteLine("Testing".ToBinary());

et si vous ajoutez 'true' comme paramètre, il séparera automatiquement chaque séquence binaire.

0
répondu Krythic 2016-06-23 21:55:57