C#编写二进制数据

时间:2015-08-01 20:33:01

标签: c#

我正在尝试将一些数据写入二进制文件。数据由多个值(字符串,十进制,整数)组成,这些值需要是单个字符串,然后写入二进制文件。

到目前为止我创建的文件是什么,但是当它出现时它将我的字符串放在那里而不是将它们转换为二进制文件,当我在记事本中打开文件时,我认为它应该看起来像1010001010等?

实际输出为 Jesse23023130123456789.54321 ,而不是二进制数字。

我在哪里错误地指责了自己?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace BinaryData
{
    class Program
    {
        static void Main(string[] args)
        {
        string name = "Jesse";
        int courseNum = 230;
        int num = 23130;
        decimal d = 123456789.54321M;

        string combined = name + courseNum + num + d;

        FileStream writeStream;

        writeStream = new FileStream("BinaryData.dat", FileMode.Create);
        BinaryWriter bw = new BinaryWriter(writeStream);
        bw.Write(combined);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这样做的方法不止一种,但这是一种基本方法。将所有内容组合成单个string迭代字符串后,将每个字符转换为Convert.ToString(char, 2)的二进制表示形式。 ASCII字符的长度通常为7位或更少,因此您需要PadLeft(8, '0')以确保每字节8位。然后反过来,你一次只能获取8位并将其转换回ASCII字符。如果没有使用前导0填充以确保8位,您将无法确定文件中每个字符的位数。

using System;
using System.Text;

public class Program
{
    public static void Main()
    {
        string name = "Jesse";
        int courseNum = 230;
        int num = 23130;
        decimal d = 123456789.54321M;

        string combined = name + courseNum + num + d;

        // Translate ASCII to binary
        StringBuilder sb = new StringBuilder();
        foreach (char c in combined)
        {
            sb.Append(Convert.ToString(c, 2).PadLeft(8, '0'));
        }

        string binary = sb.ToString();
        Console.WriteLine(binary);

        // Translate binary to ASCII
        StringBuilder decodedBinary = new StringBuilder();
        for (int i = 0; i < binary.Length; i += 8) 
        {
            decodedBinary.Append(Convert.ToChar(Convert.ToByte(binary.Substring(i, 8), 2)));
        }
        Console.WriteLine(decodedBinary);
    }
}

结果:

01001010011001010111001101110011011001010011001000110011001100000011001000110011001100010011001100110000001100010011001000110011001101000011010100110110001101110011100000111001001011100011010100110100001100110011001000110001
Jesse23023130123456789.54321

Fiddle Demo

答案 1 :(得分:-1)

你走了:

主要方法:

static void Main(string[] args)
        {
            string name = "Jesse";
            int courseNum = 230;
            int num = 23130;
            decimal d = 123456789.54321M;

            string combined = name + courseNum + num + d;
            string bitString = GetBits(combined);
            System.IO.File.WriteAllText(@"your_full_path_with_exiting_text_file", bitString);
            Console.ReadLine();
        }

该方法根据您的字符串输入:

返回位0和1
   public static string GetBits(string input)
    {
        StringBuilder sb = new StringBuilder();
        foreach (byte b in Encoding.Unicode.GetBytes(input))
        {
            sb.Append(Convert.ToString(b, 2));
        }
        return sb.ToString();
    }

如果要创建.txt文件,请为其添加代码。这个例子已经创建了一个.txt,所以它只需要完整的路径来写入它。

相关问题