我有一个窗体,您可以在一个文本框中输入文本,然后在另一个文本框中输出转换。我有各种各样的转换。
说我输入“你好世界”
我的ascii to bytes函数给了我回复:10410110810811132119111114108100
一切都很好。现在我需要使用我的字节来ascii函数将其转换回来。问题在于
byte[] b;
b = ASCIIEncoding.ASCII.GetBytes(plaintext); //it is a string from the textbox
好的,已经解决了,但问题仍然存在,输入“1101000 1100101”作为字符串,解析为字节/字节数组,然后从中获取一个字符串。 (我知道最后一部分)
答案 0 :(得分:0)
与ASCIIEncoding.ASCII.GetBytes(string)
相反的是ASCIIEncoding.ASCII.GetString(bytes[])
:
string plaintext = "hello world";
byte[] b = ASCIIEncoding.ASCII.GetBytes(plaintext);
Console.WriteLine(b); // new bytes[] { 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 }
string s = ASCIIEncoding.ASCII.GetString(b);
Console.WriteLine(s); // "hello world"
ASCIIEncoding.ASCII.GetBytes("hello world")
如何让我回归10410110810811132119111114108100
?!这不是二元的!
它没有给你那个号码。它给你一个字节数组;一个字节数组。并且byte
是0到255之间的数字(可以存储在一个字节中,因此它们是名称)。你有什么期望?仅包含1
和0
字符的字符串?那也不是二元的;那是一个字符串。
您可以使用Convert.ToString
从单个字节获取二进制字符串:
Console.WriteLine(Convert.ToString(104, 2)); // "1101000"
请注意,您需要左键填充这些字符串以使其使用8个字符。
答案 1 :(得分:0)
从二进制输入字符串到ASCII字符串
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string input = "1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100";
string[] binary = input.Split(' ');
Console.WriteLine(String.Join("", binary.Select(b => Convert.ToChar(Convert.ToByte(b, 2))).ToArray()));
}
}
结果:
hello world
所以现在听起来你想将你的字符串转换为二进制,然后从二进制转换回字符串。从我的OLD ANSWER中,您可以使用Select()
(LINQ)语句将您的字符串转换为二进制字符串数组。
一旦你有一个二进制字符串数组,要将其转换回来,你必须将每个元素从基数2转换为byte
,然后将byte
转换为char
,从而产生一个char[]
,可以从中转换回string
。不需要填充。
using System;
using System.Linq;
using System.Text;
public class Program
{
public static void Main()
{
string input = "hello world";
byte[] inputBytes = ASCIIEncoding.ASCII.GetBytes(input);
// Decimal display
Console.WriteLine(String.Join(" ", inputBytes));
// Hex display
Console.WriteLine(String.Join(" ", inputBytes.Select(ib => ib.ToString("X2"))));
// Binary display
string[] binary = inputBytes.Select(ib => Convert.ToString(ib, 2)).ToArray();
Console.WriteLine(String.Join(" ", binary));
// Converting bytes back to string
Console.WriteLine(ASCIIEncoding.ASCII.GetString(inputBytes, 0, inputBytes.Length));
// Binary to ASCII (This is what you're looking for)
Console.WriteLine(String.Join("", binary.Select(b => Convert.ToChar(Convert.ToByte(b, 2)))));
}
}
结果:
104 101 108 108 111 32 119 111 114 108 100
68 65 6C 6C 6F 20 77 6F 72 6C 64
1101000 1100101 1101100 1101100 1101111 100000 1110111 1101111 1110010 1101100 1100100
hello world
hello world