C # байтовый массив в переменные - PullRequest
0 голосов
/ 01 июня 2018

У меня есть байтовый массив, и я хотел бы получить значения из него в переменные.Я знаю формат значений, например, string, unsigned int и т. Д.

byte[] buffer = File.ReadAllBytes("binarydata.bin");
string value1 = ???
uint16 value2 = ???
string value3 = ???
uint32 value4 = ???

Как я могу присвоить значения?Я знаю, что первое значение представляет собой строку из 8, я знаю, что второе значение представляет собой 16-разрядное целое число с присвоенным значением, а третье значение представляет собой строку из 12, а 32-разрядное целое число без знака является целым.

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Вы можете использовать BinaryReader, этот пример записывает данные в двоичном виде.После читает двоичные данные и присваивает переменные.

using System;
using System.IO;

class ConsoleApplication
{
const string fileName = "AppSettings.dat";

static void Main()
{
    WriteDefaultValues();
    DisplayValues();
}

public static void WriteDefaultValues()
{
    using (BinaryWriter writer = new BinaryWriter(File.Open(fileName, FileMode.Create)))
    {
        writer.Write(1.250F);
        writer.Write(@"c:\Temp");
        writer.Write(10);
        writer.Write(true);
    }
}

public static void DisplayValues()
{
    float aspectRatio;
    string tempDirectory;
    int autoSaveTime;
    bool showStatusBar;

    if (File.Exists(fileName))
    {
        using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
        {
            aspectRatio = reader.ReadSingle();
            tempDirectory = reader.ReadString();
            autoSaveTime = reader.ReadInt32();
            showStatusBar = reader.ReadBoolean();
        }

        Console.WriteLine("Aspect ratio set to: " + aspectRatio);
        Console.WriteLine("Temp directory is: " + tempDirectory);
        Console.WriteLine("Auto save time set to: " + autoSaveTime);
        Console.WriteLine("Show status bar: " + showStatusBar);
        }
    }
}
0 голосов
/ 01 июня 2018

Вы можете просто использовать BinaryReader

Считывает примитивные типы данных как двоичные значения в определенной кодировке

Пример

using (BinaryReader reader = new BinaryReader(File.Open(fileName, FileMode.Open)))
{
    var aspectRatio = reader.ReadSingle();
    var tempDirectory = reader.ReadString();
    var autoSaveTime = reader.ReadInt32();
    var showStatusBar = reader.ReadBoolean();

    Console.WriteLine("Aspect ratio set to: " + aspectRatio);
    Console.WriteLine("Temp directory is: " + tempDirectory);
    Console.WriteLine("Auto save time set to: " + autoSaveTime);
    Console.WriteLine("Show status bar: " + showStatusBar);
}

Обновление из xanatos

ReadString Считывает строку из текущего потока.Строка имеет префикс длины, закодированный как целое число по семь битов за раз.

...