因为工作需要,要将二进文件读进来,并将里边的内容修改掉。要把一些数值,字符什么的填到文件里。
找C#里相关的接口,鬼都没见着,通过FOX看到一个Number类,但是internal类型的。。。
总不能自己写一个求补的程序吧???而且类型可能是枚举,可能是结构体,那不就折腾死了!!
最终用了几年没用过的东西,指针,问题瞬间解决。想当年动不动就二级、三级指针的时候,用得很爽,要不然也不会想起还有指针这回事。C#是支持的,但一直没用过,只是一定要包含在unsafe块中,并且取地址的对象必须不是托管类型的,所以也没有办法用泛型(这点比较闷)。
比如:
long
t
=
32552452
;
byte
*
bp
=
(
byte
*
)
&
t;
int
size
=
sizeof
(
long
);
byte
[] bytes
=
new
byte
[size];
for
(
int
i
=
0
;i
<
size;i
++
)
bytes[i]
=
*
(bp
+
i);
除了第一行代码,其余的都可以抽象为一个通用的方法:
public
unsafe
static
byte
[] Copy(
byte
*
p,
int
size)
{
byte[] bytes = new byte[size];
for(int i=0;i<size;i++)
bytes[i] = *(p+i);
return bytes;
}
调用:
long
t
=
21242542
;
byte
[] bytes
=
Copy((
byte
*
)
&
t,
sizeof
(
long
));
找C#里相关的接口,鬼都没见着,通过FOX看到一个Number类,但是internal类型的。。。
总不能自己写一个求补的程序吧???而且类型可能是枚举,可能是结构体,那不就折腾死了!!
最终用了几年没用过的东西,指针,问题瞬间解决。想当年动不动就二级、三级指针的时候,用得很爽,要不然也不会想起还有指针这回事。C#是支持的,但一直没用过,只是一定要包含在unsafe块中,并且取地址的对象必须不是托管类型的,所以也没有办法用泛型(这点比较闷)。
比如:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
除了第一行代码,其余的都可以抽象为一个通用的方法:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
调用:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)