当前位置: 首页 > news >正文

做网站需要掌握wordpress 个人简介

做网站需要掌握,wordpress 个人简介,网站建设方案书 阿里云,网站必须做等保合规在 C 和 C# 编程语言中#xff0c;结构体#xff08;Struct#xff09;是值类型数据结构#xff0c;它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法#xff0c;叫共用体#xff08;Union#xff09;#xff0c;有时也被直译… 在 C 和 C# 编程语言中结构体Struct是值类型数据结构它使得一个单一变量可以存储多种类型的相关数据。在 C 语言中还有一种和结构体非常类似的语法叫共用体Union有时也被直译为联合或者联合体。而在 C# 中并没有共用体这样一个定义本文将介绍如何使用 C# 实现 C 语言中的共用体。理解 C 语言的共用体在 C 语言中共用体是一种特殊的数据类型允许你使用相同的一段内存空间存储不同的成员数据。光看定义有点抽象我们来看一个 C 语言的共用体示例#include stdio.hunion data{int n;char ch;short m; };int main(){union data a;printf(%d, %d\n, sizeof(a), sizeof(union data) );a.n 0x40;printf(%X, %c, %hX\n, a.n, a.ch, a.m);a.ch 9;printf(%X, %c, %hX\n, a.n, a.ch, a.m);a.m 0x2059;printf(%X, %c, %hX\n, a.n, a.ch, a.m);a.n 0x3E25AD54;printf(%X, %c, %hX\n, a.n, a.ch, a.m);return 0; }运行结果4, 4 40, , 40 39, 9, 39 2059, Y, 2059 3E25AD54, T, AD54要想理解上面的输出结果就得了解共用体各个成员在内存中的分布。此示例中的 data 各个成员在内存中的分布示意图如下也就是说共用体的所有成员占用的是同一段内存所占内存等于最长的成员占用的内存修改一个成员会影响其它所有成员。而结构体的各个成员占用的是各自不同的内存所占内存大于等于所有成员占用的内存的总和成员之间可能会存在缝隙成员相互之间没有影响。这是共用体和结构的主要区别。使用 C# 实现共用体和 C 语言不同的是C# 中没有共用体的定义。那在 C# 中如何来实现这种定义呢C# 不仅可以实现共用体而且可以实现比 C 语言更强大的共用体。C 语言的共用体每个成员在共用的内存中都必须从相同的起始位置开始存储而在 C# 中可以指定各成员的起始位置相对偏移。好处是不仅可以节省内存空间还可以实现一些自动转换操作。以 IP 地址的存储为例IP 地址是以 4 段数字来表示的如 192.168.1.10每一段是一个字节Byte长度是 2^8最大值是 255。我们可以用很多类型来表示 IP 地址比如字符串、整型、自定义类和结构等。但如果我们有时要访问或修改其中一段怎样存储最为方便呢我们可以使用 C# 的显示布局结构体来实现类似 C 语言中的共用体以方便灵活地操作 IP 地址的每一段。实现方式如下using System.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)] public struct IpAddress {// FieldOffset 表示偏移的位置以字节为单位// sizeof(int) 4, sizeof(byte) 1[FieldOffset(0)] public int Address;[FieldOffset(0)] public byte Byte1;[FieldOffset(1)] public byte Byte2;[FieldOffset(2)] public byte Byte3;[FieldOffset(3)] public byte Byte4;public IpAddress(int address) : this(){// 给 Address 赋值时所有成员的值都会自动被修改Address address;}public override string ToString() ${Byte1}.{Byte2}.{Byte3}.{Byte4}; }这里我们使用了 StructLayout 特性标注了 IpAddress声明其内存分布是显示Explicit的然后使用 FieldOffset 特性来标注成员在共用内存中相对起始位置的偏移量以字节为单位。如此我们就用 C# 实现了和 C 语言一样的共用体。可能你不能马上体会这样实现的妙处让来我们来看一个应用场景。假设我要在 IP 段内随机生成一个 IP比如前两段不变后两段随机形如192.163.X.X。使用上面定义好的“共用体”我们可以这样做var ip new IpAddress(new Random().Next()); Console.WriteLine(${ip} {ip.Address}); ip.Byte1 192; ip.Byte2 168; Console.WriteLine(${ip} {ip.Address});输出结果47.29.249.122 2063146287 192.168.249.122 2063182016这样不仅节省内存而且可以很灵活方便地读取和修改 IP 中的某一段。由于成员 Address 和其它成员共用内存所以修改一个成员其余就自动修改。共用体作为另一个共用体的成员既然“共用体”是值类型那么共用体自然也可以作为作为另一个共用体的成员。让我们来看一个较为复杂的例子使用共用体实现由协议、IP 和端口三部分组成的服务端地址的表示形如协议://IP:端口。using System; using System.Runtime.InteropServices;[StructLayout(LayoutKind.Explicit)] public struct IpAddress {[FieldOffset(0)] public int Address;[FieldOffset(0)] public byte Byte1;[FieldOffset(1)] public byte Byte2;[FieldOffset(2)] public byte Byte3;[FieldOffset(3)] public byte Byte4;public IpAddress(int address) : this(){Address address;}public override string ToString() ${Byte1}.{Byte2}.{Byte3}.{Byte4}; }public enum Protocol : byte { http, https, ftp, sftp, tcp };[StructLayout(LayoutKind.Explicit)] public struct Server {[FieldOffset(0)] public IpAddress Address;[FieldOffset(4)] public ushort Port;[FieldOffset(6)] public Protocol Protocol;[FieldOffset(0)] public long Payload;public Server(IpAddress addr, ushort port, Protocol prot) : this(){Address addr;Port port;Protocol prot;}public Server(long payload){// 参数长度可能不足填满每个成员所以这里先对成员设初始值Address new IpAddress(0);Port 80;Protocol Protocol.http;// 填值Payload payload;}public Server Copy() new Server(Payload);public override string ToString() ${Protocol}://{Address}:{Port}; }我们来用一段测试代码验证一下这个Server结构体的内存使用情况var ip new IpAddress(new Random().Next()); Console.WriteLine($Size: {Marshal.SizeOf(ip)} bytes. Value: {ip.Address} {ip});var s1 new Server(ip, 8080, Protocol.https); var s2 new Server(s1.Payload); s2.Address.Byte1 100; s2.Protocol Protocol.ftp; Console.WriteLine($Size: {Marshal.SizeOf(s1)} bytes. Value: {s1.Address} {s1}); Console.WriteLine($Size: {Marshal.SizeOf(s2)} bytes. Value: {s2.Address} {s2});输出结果Size: 4 bytes. Value: 2102736192 64.53.85.125 Size: 8 bytes. Value: 64.53.85.125 https://64.53.85.125:8080 Size: 8 bytes. Value: 100.53.85.125 ftp://100.53.85.125:8080示例中IP 地址偏移 0 字节长度为 4 字节端口号偏移 4 字节长度为 2 字节协议偏移 6 字节长度为 1 字节。总长度应为 4217 字节但实际打印出来却是 8 字节请问是为什么参考https://bit.ly/3qmH92V-精致码农带你洞悉编程与架构↑长按图片识别二维码关注不要错过网海相遇的缘分
http://www.zqtcl.cn/news/491722/

相关文章:

  • 邢台网站推广wordpress文章数据库位置
  • wordpress 快站wordpress 安装主题 主机名
  • 老网站改版启用二级域名网站建设服务是什么意思
  • 网站建设营销话术外销网站
  • 找个人给我做电影网站好主题网站开发介绍
  • 运城公司网站建设苏州网站建设苏州
  • 湖北省住房和建设厅网站首页网站用免费空间好不好
  • 网站建设公司案例做网站小图标大全
  • 美食网站主页怎么做网络营销推广的作用
  • 上海建站价格wordpress表白系统
  • 唐山 建设工程信息网站中天钢铁 网站建设
  • 公司没有备案了网站摄影素材网站
  • 正规的网店平台有哪些北京公司排名seo
  • 网页制作素材库哪个网站上海门户网站开发
  • 做网站 分辨率应该是多少做阿里巴巴网站要多少钱
  • 有专业做外贸的网站吗千岛湖网站建设
  • 百度怎么做开锁网站中国咖啡网站建设方案
  • 新网站不被收录郑州网站建设培训学校
  • 网站群建设意见征集北京做网站报价
  • 网站建设开发费会计处理山东省住房和城乡建设厅二建查询
  • 市工商局网站建设情况襄阳网站seo诊断
  • 动漫做那个视频网站单网页网站如何做
  • 企业网站名是什么意思广州公共交易中心
  • 做网站那家好沈阳做网站公司哪家好
  • 现在做一个网站大概多少钱中国住房城乡建设部网站
  • 高端企业网站建设核心秦皇岛网站制作人才招聘
  • 网站制作花多少钱简历模板表格
  • 泰安专业网站开发公司网页设计师常逛网站
  • 百度收录万网空间的网站需要多久推广seo网站
  • 个体工商户可以做网站备案吗微信app下载安装官方版2023