简体   繁体   English

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

[英]C# byte array to string, and vice-versa

I have some C++ code that persists byte values into files via STL strings & text i/o, and am confused about how to do this in C#. 我有一些C ++代码通过STL字符串和文本i / o将字节值保存到文件中,并且对如何在C#中执行此操作感到困惑。

first I convert byte arrays to strings & store each as a row in a text file: 首先,我将字节数组转换为字符串并将每个数组存储为文本文件中的一行:

 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
 }

later ... I'd like to reverse the steps and get back the original byte values: 稍后...我想反转步骤并取回原始字节值:

  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 (*)
  }

How do you do those assignments (*) ? 你是如何做这些作业的(*)?

class Encoding supports what you need, example below assumes that you need to convert string to byte[] using UTF8 and vice-versa: class Encoding支持你需要的东西,下面的例子假设你需要使用UTF8string转换为byte[] ,反之亦然:

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

If you need to use other encodings, you can change easily: 如果您需要使用其他编码,您可以轻松更改:

Encoding.Unicode
Encoding.ASCII
...

this one has been answered over and over 这一个已经一遍又一遍地回答

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? 如何在不手动指定编码的情况下在C#中获得字符串的一致字节表示?

Read the first answer carefully, and the reasons why you would prefer this to the Encoding version. 仔细阅读第一个答案,以及为什么您更喜欢这个编码版本。

    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; }



}

You can use this code to Convert from string array to Byte and ViseVersa 您可以使用此代码将字符串数组转换为Byte和ViseVersa

Click the link to know more about C# byte array to string, and vice-versa 单击链接以了解有关C#字节数组到字符串的更多信息,反之亦然

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);
}

I hope this helps you. 我希望这可以帮助你。 Thanks. 谢谢。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM