如何将字符串转换为二进制

时间:2009-08-28 08:44:46

标签: c# string binary

foreach (byte binaryOutupt in Encoding.ASCII.GetBytes(fileLine))
{
       fileOutput.Write(binaryOutupt.ToString("x2"));
 }

我有这个代码,它允许我将字符串字节转换为十六进制,但我该如何反转呢?

3 个答案:

答案 0 :(得分:4)

以下是完整往返的示例,包括您的编码。

// Input
String input = "Test1234";

// Encoding
String outputA = String.Empty;  
foreach (Byte b in Encoding.ASCII.GetBytes(input))
{
    outputA += b.ToString("X2");
}

// Decoding
Byte[] bytes = new Byte[outputA.Length / 2];
for (Int32 i = 0; i < outputA.Length / 2; i++)
{
    bytes[i] = Convert.ToByte(outputA.Substring(2 * i, 2), 16);
}
String outputB = Encoding.ASCII.GetString(bytes);

// Output
Console.WriteLine(input);
Console.WriteLine(outputA);
Console.WriteLine(outputB);

这只是指向正确方向的一个示例 - 显然,如果输入包含无效字符或具有奇数长度,则应使用StringBuilder并在生产代码中执行一些错误处理。

答案 1 :(得分:1)

不知道这是否是一个优雅的解决方案,但似乎有效(我用小字符串测试过):

var sb = new StringBuilder("GET THE HEX LINE SOME WAY");
var strs = new string[sb.Length/2];

var i = 0;
var j = 0;
while(i<sb.Length)
{
    strs[j] = sb.ToString(i, 2);
    i += 2;
    j++;
}

foreach (var s in strs)
{
    Console.WriteLine("Hex: {0}, Orig ASCII:  {1}",
                         s, Int32.Parse(s,NumberStyles.HexNumber));
}

PS: - 在第一行初始化字符串构建器,使用文件中的十六行或您正在编写它的其他来源。

答案 2 :(得分:0)

在文件流,内存流,io流上使用io.streamreader然后你可以将字符串作为字符串读取

假设您正在读取字节流