首页 > 编程语言 >【转】C# struct byte 互转

【转】C# struct byte 互转

时间:2024-08-12 11:08:13浏览次数:10  
标签:struct temp C# bytes test 互转 byte Marshal size

文章来源(侵联删):
https://blog.csdn.net/shenaisi/article/details/104727187

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

namespace struct_test
{
    internal class Program
    {
        static void Main(string[] args)
        {
            TestStruct temp_struct = new TestStruct();
            temp_struct.c = 1234;
            temp_struct.str = "abdcefg";
            temp_struct.test = new int[6];
            temp_struct.test[0] = 1;
            temp_struct.test[1] = 2;
            temp_struct.test[2] = 3;
            temp_struct.test[3] = 4;
            temp_struct.test[4] = 5;
            temp_struct.test[5] = 6;
            byte[] test_bytes = StructToBytes(temp_struct);
            foreach (var c in test_bytes) {
                System.Console.Write("{0} ", c);
            }
            TestStruct temp_struct2 = (TestStruct)BytesToStuct(test_bytes, typeof(TestStruct));
            System.Console.ReadLine();
        }

        static byte[] StructToBytes(object structObj)
        {
            int size = Marshal.SizeOf(structObj);
            byte[] bytes = new byte[size];
            IntPtr structPtr = Marshal.AllocHGlobal(size);
            Marshal.StructureToPtr(structObj, structPtr, false);
            Marshal.Copy(structPtr, bytes, 0, size);
            Marshal.FreeHGlobal(structPtr);
            return bytes;
        }

        static object BytesToStuct(byte[] bytes, Type type)
        {
            int size = Marshal.SizeOf(type);
            if (size > bytes.Length)
            {
                return null;
            }
            IntPtr structPtr = Marshal.AllocHGlobal(size);
            Marshal.Copy(bytes, 0, structPtr, size);
            object obj = Marshal.PtrToStructure(structPtr, type);
            Marshal.FreeHGlobal(structPtr);
            return obj;
        }
    }

    [StructLayoutAttribute(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
    struct TestStruct
    {
        public int c;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
        public string str;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
        public int[] test;
    }

}

标签:struct,temp,C#,bytes,test,互转,byte,Marshal,size
From: https://www.cnblogs.com/celticzy/p/18354501

相关文章

  • 第七期 Semantic Kernel(另一个AI框架,了解即可)
    一:LangChain和SemanticKernel对比https://blog.csdn.net/xiaoqi270620903/article/details/138334622SemanticKernel适用于需要快速构建LLM应用的场景,如智能客服、智能问答等。由于其组件关系简单,开发人员可以快速实现LLM模型的应用,并且可以根据需求进行定制化开发。La......
  • xilinx ZCU106板子运行AMP多核双CPU
    一开始的是需要在xilinx板子上HDMI直通,经过在xilinx官网上的寻找,最终发现两种办法,第一种是hdmi_rx_ss---->vpss-scaler---->axis-broadcaster---->FrameBufferWrite---->Gstreamer---->FrameBufferRead---->v_mix---->hdmi_tx_ss,最终缩减到hdmi_rx_ss---->Fr......
  • C++部分知识点总结
    动态规划:  01背包(每件物品只有1个)    不装:dp[i][j]=dp[i-1][j]    装: dp[i][j]=max(dp[i][j],dp[i-1][j-w[i]]+c[i])  完全背包    不装:dp[i][j]=dp[i-1][j]    装: dp[i][j]=max(dp[i][j],dp[i][j-w[i]]+c[i])  多重......
  • vs2022 x64 C/C++和汇编混编 遇到的坑
    vs2022x64C/C++和汇编混编遇到的坑遇到的问题二、问题复现1.出错代码2.问题分析2.1堆栈对齐问题3.解决方案总结奇数和偶数个寄存器的影响为什么`subrsp,8`对奇数个寄存器有用?结论遇到的问题0x00007FFFFAE24A29(msvcp140.dll)处(位于TestCompileConsol......
  • EF Core 索引器属性(Indexer property)场景及应用
    EFCore索引器属性(Indexerproperty)场景及应用简介EFCore中的索引器属性(IndexerProperty)是指通过一个特殊的属性来访问实体类中的数据,而不必明确声明实体属性。这种属性在一些动态或未预定义的场景中非常有用,比如当实体的属性名在编译时并不确定,或者属性名集合较大时。场景......
  • SAP EXCEL数据上传代码
    *---获取数据DATA:LT_EXCELTYPETABLEOFALSMEX_TABLINE,"具有Excel数据的表行LV_INDEXTYPEI."项目位置*&---读取EXCEL到内表CALLFUNCTION'ALSM_EXCEL_TO_INTERNAL_TABLE'EXPORTINGFILENAME......
  • C语言 ——猜数字
    目录1.前言2.游戏描述2.1游戏内容2.2游戏方法3.代码实现3.1生成游戏菜单3.2构建主函数3.3构建游戏函数4.代码附上1.前言猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏,下面我将详细介绍该游戏的实现和编程逻辑。并用二分法......
  • C语言之旅0---(看了就有收获的优质系列博客)
    本章概览1.关键字介绍2.字符和ASCII编码3.字符串和\04.转义字符5.看图放松一下呗!!!1.关键字介绍关键字就是一些具有特殊意思的一些单词,比如:if,int,while等。这个int,各位应该都熟悉吧!(对喽,前面咱们写过–intmain()),在C语言中,有些单词被赋予特殊含义和用法,以供程序员......
  • 【全网独家】OpenCV 面部识别系统
    OpenCV面部识别系统面部识别是计算机视觉中的一项重要应用,广泛用于安防监控、身份验证等领域。本文将详细介绍OpenCV中的面部识别系统,包括其应用场景、原理解释、算法流程、代码示例实现及部署测试场景。目录介绍应用使用场景原理解释算法原理流程图及解释应用场景代码......
  • Mac上的 WindowServer进程是什么?如何解决高CPU使用率
    大多数时候,我们不会关注Mac上运行的后台进程。但是,如果你在罕见的一天检查活动监视器以解决减速问题,你可能会惊讶地看到WindowServer进程位于顶部。想知道Mac上的WindowServer有什么用?它为什么要吃资源?接下来带大家了解关于WIndowServer的一些知识以及它是否安全。Mac......