При попытке маршалинга бинарных данных в структуру происходит инверсия байтов внутри полей структуры т.е. в приведённом коде buffer[0]=0x1A, buffer[1]=0x2A но в самой структуре переменная header.test1=0x2A1A.
using System.Runtime.InteropServices;
namespace Test
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
unsafe public struct TESTstruct
{
public System.UInt16 test1;
public fixed System.UInt16 test2 [4];
}
class Program
{
static void Main(string[] args)
{
string path = "C:\\TEMP\\test1";
using (FileStream fswrite= File.OpenWrite(path))
{
if (fswrite.CanWrite)
{
byte[] testline =
{
0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A, 0x8A, 0x9A, 0x0A, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B,
0x7B, 0x8B, 0x9B
};
fswrite.Write(testline,0,testline.Length);
}
}
using(FileStream fstream = File.OpenRead(path))
{
if (fstream.CanRead)
{
byte[] tempbuff= new byte[Marshal.SizeOf(typeof(TESTstruct))] ;
Console.WriteLine(Marshal.SizeOf(typeof(TESTstruct)));
TESTstruct header;
header = ReadStruct<TESTstruct>(fstream);
}
else
{
Console.WriteLine("Error");
}
}
Console.ReadKey();
}
static public T ReadStruct<T>(FileStream fs)
{
byte[] buffer = new byte[Marshal.SizeOf(typeof(T))];
fs.Read(buffer, 0, Marshal.SizeOf(typeof(T)));
GCHandle handle = GCHandle.Alloc(buffer, GCHandleType.Pinned);
T temp = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T));
handle.Free();
return temp;
}
}
Вопрос: почему происходит данная инверсия и связано ли это с порядком байтов в памяти?
Собственно есть файл с уникальными строками, их допустим 6кк, и есть вторая 2кк, нужно проверить базу 2кк на наличие в базе 6кк, и выдать только...
Всем добрый деньРазбирал пример шаблонного метода на основе делегатов, который используется при работе с WCF сервисами
Доброго дня! Хочу сделать разделение ресурсов между сборками, так как показано здесь: https://professorwebru/my/WPF/binding_and_styles_WPF/level10/10_7
Дело в том что у меня изменяется глобальная переменная внутри блока try, но другой блок не хочет видеть ее измененияИзменял банально x = int