C#Ascii到字节,解析而非转换
本文关键字:转换 到字节 C#Ascii | 更新日期: 2023-09-27 18:02:09
我有一个windows窗体,您可以在其中一个文本框中输入文本,它在另一个文本盒中输出转换。我有各种各样的转换。
说我输入"你好世界">
我的ascii到字节函数返回给我:10410110810811132119111114108100
一切都很好。现在我需要使用我的字节到ascii函数将其转换回来。
问题是
byte[] b;
b = ASCIIEncoding.ASCII.GetBytes(plaintext); //it is a string from the textbox
好的,大部分都解决了,但是,问题仍然存在,输入"1101000 1100101"作为字符串,解析为字节/字节数组,然后从中得到一个字符串。(我知道最后一部分(
更新
从二进制输入字符串到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
演示
旧答案
所以现在听起来你想把字符串转换成二进制,然后从二进制转换回字符串。根据我的旧答案,您可以使用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
演示
与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个字符。