我有一些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 (*)
}
你如何做这些作业(*)?
答案 0 :(得分:5)
班级Encoding
支持您的需求,下面的示例假定您需要使用string
将byte[]
转换为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);
}
请仔细阅读第一个答案,以及您更喜欢这个编码版本的原因。
答案 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);
}
我希望这会对你有所帮助。感谢。