C#字节数组为字符串,反之亦然

时间:2013-08-19 03:43:19

标签: c#

我有一些C ++代码,它通过STL字符串和字符串将字节值保存到文件中。文本i / o,并对如何在C#中执行此操作感到困惑。

首先我将字节数组转换为字符串&将每个作为一行存储在文本文件中:

 StreamWriter F
 loop
 {
   byte[] B;       // array of byte values from 0-255 (but never LF,CR or EOF)
   string S = B;   // I'd like to do this assignment in C# (encoding? ugh.) (*)
   F.WriteLine(S); // and store the byte values into a text file
 }

稍后......我想颠倒这些步骤并取回原始字节值:

  StreamReader F;   
  loop
  {
    string S = F.ReadLine();   // read that line back from the file
    byte[] B = S;              // I'd like to convert back to byte array (*)
  }

你如何做这些作业(*)?

4 个答案:

答案 0 :(得分:5)

班级Encoding支持您的需求,下面的示例假定您需要使用stringbyte[]转换为UTF8,反之亦然:

string S = Encoding.UTF8.GetString(B);
byte[] B = Encoding.UTF8.GetBytes(S);

如果您需要使用其他编码,您可以轻松更改:

Encoding.Unicode
Encoding.ASCII
...

答案 1 :(得分:0)

一遍又一遍地回答了这个问题

static byte[] GetBytes(string str)
{
    byte[] bytes = new byte[str.Length * sizeof(char)];
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
    return bytes;
}

static string GetString(byte[] bytes)
{
    char[] chars = new char[bytes.Length / sizeof(char)];
    System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
    return new string(chars);
}


How do I get a consistent byte representation of strings in C# without manually specifying an encoding?

请仔细阅读第一个答案,以及您更喜欢这个编码版本的原因。

答案 2 :(得分:0)

    public Document FileToByteArray(string _FileName)
    {
        byte[] _Buffer = null;

        try
        {
            // Open file for reading
         FileStream _FileStream = new FileStream(_FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
            // attach filestream to binary reader
           BinaryReader _BinaryReader = new BinaryReader(_FileStream);
            // get total byte length of the file
            long _TotalBytes = new FileInfo(_FileName).Length;
            // read entire file into buffer
            _Buffer = _BinaryReader.ReadBytes((Int32)_TotalBytes);
            // close file reader
            _FileStream.Close();
            _FileStream.Dispose();
            _BinaryReader.Close();
            Document1 = new Document();
            Document1.DocName = _FileName;
            Document1.DocContent = _Buffer;
            return Document1;
        }
        catch (Exception _Exception)
        {
            // Error
            Console.WriteLine("Exception caught in process: {0}", _Exception.ToString());
        }

        return Document1;
    }

    public void ByteArraytoFile(string _FileName, byte[] _Buffer)
    {
        if (_FileName != null && _FileName.Length > 0 && _Buffer != null)
        {
            if (!Directory.Exists(Path.GetDirectoryName(_FileName)))
                Directory.CreateDirectory(Path.GetDirectoryName(_FileName));

            FileStream file = File.Create(_FileName);

            file.Write(_Buffer, 0, _Buffer.Length);

            file.Close();
        }



    }

public static void Main(string[] args)
    {
        Document doc = new Document();
        doc.FileToByteArray("Path to your file");
        doc.Document1.ByteArraytoFile("path to ..to be created file", doc.Document1.DocContent);
    }
private Document _document;

public Document Document1
{
    get { return _document; }
    set { _document = value; }
}
public int DocId { get; set; }
public string DocName { get; set; }
public byte[] DocContent { get; set; }



}

答案 3 :(得分:0)

您可以使用此代码将字符串数组转换为Byte和ViseVersa

点击该链接以了解有关C# byte array to string, and vice-versa

的更多信息
string strText = "SomeTestData";

            //CONVERT STRING TO BYTE ARRAY
            byte[] bytedata = ConvertStringToByte(strText);                              

            //VICE VERSA ** Byte[] To Text **
            if (bytedata  != null)
            {                    
                //BYTE ARRAY TO STRING
                string strPdfText = ConvertByteArrayToString(result);
            }


//Method to Convert Byte[] to string
private static string ConvertByteArrayToString(Byte[] ByteOutput)
{
            string StringOutput = System.Text.Encoding.UTF8.GetString(ByteOutput);
            return StringOutput;
}


//Method to Convert String to Byte[]
public static byte[] ConvertStringToByte(string Input)
{
            return System.Text.Encoding.UTF8.GetBytes(Input);
}

我希望这会对你有所帮助。感谢。