将字节数组(从readfile)转换为字符串
本文关键字:转换 字符串 readfile 字节 字节数 数组 | 更新日期: 2023-09-27 17:49:42
所以,我使用kernel32
中的ReadFile
来读取文件。下面是我在SetFilePointer
和ReadFile
的帮助下读取文件的代码。
public long ReadFileMe(IntPtr filehandle, int startpos, int length, byte[] outdata)
{
IntPtr filea = IntPtr.Zero;
long ntruelen = GetFileSize(filehandle, filea);
int nRequestStart;
uint nRequestLen;
uint nApproxLength;
int a = 0;
if (ntruelen <= -1)
{
return -1;
}
else if (ntruelen == 0)
{
return -2;
}
if (startpos > ntruelen)
{
return -3;
}
else if (length <= 0)
{
return -5;
}
else if (length > ntruelen)
{
return -6;
}
else
{
nRequestStart = startpos;
nRequestLen = (uint)length;
outdata = new byte[nRequestLen - 1];
SetFilePointer(filehandle, (nRequestStart - 1), ref a, 0);
ReadFile(filehandle, outdata, nRequestLen, out nApproxLength, IntPtr.Zero);
return nApproxLength; //just for telling how many bytes are read in this function
}
}
当我使用这个函数时,它工作(用于另一个目的),所以这段代码经过测试并工作。
但主要的问题是,我现在需要将函数将字节转换为string
的参数上的outdata
。
我尝试使用Encoding.Unicode
等(所有UTF),但它不起作用。
尝试使用Encoding.GetString (Byte[], Int32, Int32)
方法。将指定的byte
数组中的byte
s序列解码为string
。
嗯…Encoding.Name_of_encoding。GetString必须工作…试试这样写:
var convertedBuffer = Encoding.Convert(
Encoding.GetEncoding( /*name of encoding*/),Encoding.UTF8, outdata);
var str = Encoding.UTF8.GetString(convertedBuffer);
:那么这个呢?:
using (var streamReader = new StreamReader(@"C:'test.txt", true))
{
var currentEncoding = streamReader.CurrentEncoding.EncodingName;
Console.WriteLine(currentEncoding);
}
您可能需要在outdata
参数上添加out参数:使用ref和out传递数组
public long ReadFileMe(IntPtr filehandle, int startpos, int length, out byte[] outdata)