C# 使用指针将不同值类型赋值到字节数组中

C#指针操作字节数组

Demo(以添加short类型的值为例):

//bytes:目标字节数组; offset:目标在字节数组的位置; value:添加的类型值public static unsafe void WriteInt16ToBytes(byte[] bytes, int offset, short value)
{
    fixed (byte* ptr = bytes)
    {
        *((short*)(ptr + offset)) = value;
    }
}

实现思路:

1.创建指向字节数组bytes第一个字节的指针

2.通过增加偏移量offset,找到存放value值的内存区域

3.将该区域转换为short(两个字节)大小

4.将value复制到该区域,完成short类型变量向bytes的赋值

时间: 2024-10-14 03:59:06

C# 使用指针将不同值类型赋值到字节数组中的相关文章

C#值类型赋值与引用类型的赋值

在C#中,数据类型大致可以分为两类,一类是值类型,一类是引用类型.初学者往往会被类型之间的相互赋值搞的很迷惑,尤其是引用类型变量的相互赋值. 现在举2个例子,来一一说明. 值类型变量的赋值: 值类型变量中保存的是实际数据,在赋值的时候只是把数据复制一份,然后赋给另一个变量. 例子1: int var1=2; int var2=var1;  //编译器会先复制var1的值,然后把它赋给var2.很明显var2的值也为2 引用类型变量的赋值:  引用类型变量中保存的是“指向实际数据的引用指针”.在进

关于C#编程中引用与值类型赋值的一些容易犯错的地方

值类型与引用类型的区别在于:值类型在赋值的时候是拷贝值,引用类型在赋值的时候的拷贝引用.记住这一个原则,我们再来分析一些具体情况: 1 PointStruct pt1 = new PointStruct(2,2); 2 PointStruct pt2 = pt1; 3 PointStruct[] ptsArray = new PointStruct[3]; 4 ptsArray[0] = pt1; 5 ptsArray[1] = pt2; 6 List<PointStruct> ptsList

[转] 值类型与引用类型(中)

本文将介绍以下内容: 类型的基本概念 值类型深入 引用类型深入 值类型与引用类型的比较及应用 1. 引言 上回[第八回:品味类型---值类型与引用类型(上)-内存有理]的发布,受到大家的不少关注,我们从内存的角度了解了值类型和引用类型的所以然,留下的任务当然是如何应用类型的不同特点在系统设计.性能优化等方面发挥其作用.因此,本回是对上回有力的补充,同时应朋友的希望,我们尽力从内存调试的角度来着眼一些设计的分析,这样就有助于对这一主题进行透彻和全面的理解,当然这也是下一回的重点. 从内存角度来讨论

值类型struct在foreach中的陷阱

最近踩了一个坑,为了优化代码,把class改为了struct,结果发现原来的初始化语句没有预期的运行,伪代码如下: public struct A { bool _isActive; public void Init(bool isActive) { _isActive = isActive; } } public A[] _arrayA; //调用如下 foreach A a in _arrayA) { a.Init(); } 看着是能达到预期的,但实际上不是的.            在fo

PHP函数-检查某个值是否存在于数组中

函数:in_array -- 检查数组中是否存在某个值定义:bool in_array ( mixed needle, array haystack [, bool strict] )在haystack 中搜索 needle,如果找到则返回 TRUE,否则返回 FALSE. 如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同. 例子1. in_array() 例子<?php $os = array("

java中将int类型数据存到数组中

//定义一个数据 int number = 123456; //定义一个数组 int[] arr = new int[8]; //通过观察这个代码,我们发现应该是可以通过循环改进的 int index = 0; while(number > 0) { //number=123456,number=12345,number=1234,number=123,number=12,number=1,number=0 arr[index] = number%10; //arr[0]=6,arr[1]=5,

用C++编程 输入10个数字,放在一个数组中,找出其中最小的值,输出这个值以及它在数组中的下标

1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int a[10],min,i,xb; 6 cout<<"Input 10 number:"; 7 for(i=0;i<10;i++) 8 cin>>a[i]; 9 min=a[0]; 10 xb=0; 11 for(i=0;i<10;i++) 12 { 13 if(a[i]<min) 14 { 15 min

C#引用类型和值类型的区别

1***.C#中有两种类型: 值类型和引用类型: 值类型的变量直接包含他们的数据,而引用类型的变量存储 引用类型存储对他们的数据的引用,后者称为对象: 简单说:值类型直接存储其值,引用类型存储对值得引用.引用类型分为引用和引用的对象. 2***. 值类型:简单类型.枚举.结构 引用类型: 类类型.接口类型.数组类型和委托类型 3***.值类型与引用类型的内存存储 单纯的说值类型存储在栈上,引用类型存储在托管堆上是不对的. 4***.区别: 1. 托管堆: 同步块和方法表, x,y,托管堆上的需要

C# 数据类型 数组,引用类型 值类型

1 /*C#语法基础 2 * 1.C#程序是从Main方法开始执行.要求Main方法的返回值类型为void或int ,而且要么不带参数,要么接受一个字符串数组作为参数.当返回值是int的是状态吗,标志程序是否执行成功,返回非 3 * 0值通常意味着错误: 4 * 2.类型:是具有相似特征和行为的个体的分类: 5 * 3.一次赋值返回一个值,所以C#允许在同一条语句中连续进行多个赋值操作: 6 * 4.基元类型:8中整数类型,2种二进制浮点类型,1种金融计算的额十进制浮点类型,1种布尔类型,1种字