Как преобразовать двоичный файл в строку?
static List<int> ConvertTextToBinary(int number, int Base)
{
List<int> list = new List<int>();
while (number!=0)
{
list.Add(number % Base);
number = number / Base;
}
list.Reverse();
return list;
}
static void Main(string[] args)
{
string s = "stackru";
int counter=0;
while (counter!=s.Length)
{
int[] a = ConvertTextToBinary(s[counter], 2).ToArray();
for (int i = 0; i < a.Length; i++)
{
Console.Write(a[i]);
}
Console.Write("\n");
counter++;
}
}
Я написал метод для преобразования строки в двоичный файл, он работает нормально. Но теперь я хочу преобразовать двоичный файл в строку, например: 1101000 равно h.
4 ответа
Решение
static string ConvertBinaryToText(List<List<int>> seq){
return new String(seq.Select(s => (char)s.Aggregate( (a,b) => a*2+b )).ToArray());
}
static void Main(){
string s = "stackru";
var binary = new List<List<int>>();
for(var counter=0; counter!=s.Length; counter++){
List<int> a = ConvertTextToBinary(s[counter], 2);
binary.Add(a);
foreach(var bit in a){
Console.Write(bit);
}
Console.Write("\n");
}
string str = ConvertBinaryToText(binary);
Console.WriteLine(str);//stackru
}
Для преобразования байта [] в строку
byte[] bytes ;
string base64Data = Convert.ToBase64String (bytes);
или же
string strData = Encoding.Default.GetString(bytes);
Вы можете преобразовать один битовый набор в символ следующим образом:
int[] h = { 1, 1, 0, 1, 0, 0, 0 };
int result = 0;
int bitValue = 1;
for (int i = h.Length - 1; i >= 0 ; i--)
{
result += h[i] * bitValue;
bitValue *= 2;
}
Console.WriteLine((char)result);
Каждый бит соответствует кратному 2. Начав с последнего бита и умножив значение бита на два, вы получите желаемый результат.
string nameStr = "1011010100111010";
var result = "";
byte[] bytes = new byte[nameStr.Length / 8];
for (int i = 0; i < bytes.Length; i++)
{
// coverting each substring to a byte
bytes[i] = Convert.ToByte(nameStr.Substring(i * 8, 8), 2);
}
// coverting it back to a string
var sb = new StringBuilder();
foreach (var b in bytes)
{
sb.Append((char)b);
}
result = sb.ToString();
Двоичный файл должен быть кратен 8, и если он не кратен 8, добавьте 0 в начале, пока он не станет кратным 8.