将字节数组(从readfile)转换为字符串

本文关键字:转换 字符串 readfile 字节 字节数 数组 | 更新日期: 2023-09-27 17:49:42

所以,我使用kernel32中的ReadFile来读取文件。下面是我在SetFilePointerReadFile的帮助下读取文件的代码。

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),但它不起作用。

将字节数组(从readfile)转换为字符串

尝试使用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)