[C#]快速将字符串转换为结构
时间:2019-09-04
本文章向大家介绍[C#]快速将字符串转换为结构,主要包括[C#]快速将字符串转换为结构使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[C#]快速将字符串转换为结构
看到MSDN上请问将一个字符串copy到一个结构中最快的方式为何?这篇的发问,做些纪录:
要将字符串快速转换为结构,首先我们必须要在结构上加些Attribute,像是设定每个字段所占用的型态、大小...等:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string fname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string lname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public string phone;
}
在转换时先透过Marshal.StringToBSTR将字符串转为指针,再透过Marshal.PtrToStructure将指针转换为指定的结构型态,最后再用Marshal.FreeBSTR把刚刚的指针位置给释放掉就可以了:
private static T ConvertToStruct(string val)
{
IntPtr valPoint = Marshal.StringToBSTR(val);
T ret = (T)Marshal.PtrToStructure(valPoint, typeof(T));
Marshal.FreeBSTR(valPoint);
return ret;
}
完整范例如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace ConsoleApplication20
{
class Program
{
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MyStruct
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string fname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string lname;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 7)]
public string phone;
}
private static T ConvertToStruct(string val)
{
IntPtr valPoint = Marshal.StringToBSTR(val);
T ret = (T)Marshal.PtrToStructure(valPoint, typeof(T));
Marshal.FreeBSTR(valPoint);
return ret;
}
public static void Main()
{
MyStruct ms = ConvertToStruct("abcdefgh2223333");
Console.WriteLine("fname is: {0}", ms.fname);
Console.WriteLine("lname is: {0}", ms.lname);
Console.WriteLine("phone is: {0}", ms.phone);
}
}
}
运行后可以发现abcdefgh2223333字符串会依照我们在结构字段所设定的长度自动填入:
Link
- How to copy a String into a struct using C#
- 请问将一个字符串copy到一个结构中最快的方式为何?
原文地址:https://www.cnblogs.com/petewell/p/11457663.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法