c# 从二进制文件中读取内容到缓存并赋给一个结构体

imdemon 2009-05-20 04:57:07
大家好,由于我只会C++,现在又一份C#需要做一个小小的改动。。

我需要帮助。

我从文件中读取了一段内容到Buffer,
这段Buffer是我用C++程序写入的一个结构体。
struct IMAGE_TLS_DIRECTORY32
{
DWORD StartAddressOfRawData;
DWORD EndAddressOfRawData;
DWORD AddressOfIndex;
DWORD AddressOfCallBacks;
DWORD SizeOfZeroFill;
DWORD Characteristics;
}

现在我需要在C#中操作它。

根据我查到的一些资料。。

我先在C#中定义这样一个结构体:
public struct IMAGE_TLS_DIRECTORY32
{
public fixed uint StartAddressOfRawData;
public fixed uint EndAddressOfRawData;
public fixed uint AddressOfIndex;
public fixed uint AddressOfCallBacks;
public fixed uint SizeOfZeroFill;
public fixed uint Characteristics;
}

然后我想把Buffer转成IMAGE_TLS_DIRECTORY32类型,

比如我定义一个 IMAGE_TLS_DIRECTORY32 strctA;
想把Buffer的内容赋给strctA

然后通过strctA.StartAddressOfRawData 来给一些变量赋值

这可以做到吗?怎么做?

我不会写C#代码,有哪位朋友能提供帮助。。
...全文
351 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChrisAK 2009-05-20
  • 打赏
  • 举报
回复
直接声明用指针最简单.
如果不能unsafe,就改用Marshal
这个比较麻烦,得先用Marshal的Alloc*申请一块非托管内存,
然后用Marshal.Copy把缓冲区复制过去,然后调用Marshal.PtrToStructure
生成结构体,最后再用Marshal.Free*释放申请的内存.
zgke 2009-05-20
  • 打赏
  • 举报
回复
byte[] _LoadBytes; //Load Bytes 获取你的Buffer

int _StuctSize = Marshal.SizeOf(typeof(IMAGE_TLS_DIRECTORY32));
IntPtr _StructIntPtr = Marshal.AllocHGlobal(_StuctSize);
Marshal.Copy(_LoadBytes, 0, _StructIntPtr, _StuctSize);
object _StructObject = Marshal.PtrToStructure(_StructIntPtr, typeof(IMAGE_TLS_DIRECTORY32));
Marshal.FreeHGlobal(_StructIntPtr);

IMAGE_TLS_DIRECTORY32 _Image = (IMAGE_TLS_DIRECTORY32)_StructObject;
富莱工作室 2009-05-20
  • 打赏
  • 举报
回复

using (BinaryReader br = new BinaryReader(File.Open(fileName, FileMode.Open)))
{
uint StartAddressOfRawData = br.ReadUInt32();
uint EndAddressOfRawData = br.ReadUInt32();
uint AddressOfIndex = br.ReadUInt32();
uint AddressOfCallBacks = br.ReadUInt32();
uint SizeOfZeroFill = br.ReadUInt32();
uint Characteristics = br.ReadUInt32();

}


试试看行不
imdemon 2009-05-20
  • 打赏
  • 举报
回复
楼上,你是在祝福我吗。。-_-"
kensouterry 2009-05-20
  • 打赏
  • 举报
回复
两种编程语言进行交互操作啊
呵呵 你慢慢忙吧!
kensouterry 2009-05-20
  • 打赏
  • 举报
回复
两种编程语言进行交互操作啊
呵呵 你慢慢忙吧!

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧