• c# 笔记


    1、将一维数组转换为字符串的表现形式(string.Join)

      int[] data = new int[] { 10, 5, 48, 72, 14, 2, 88, 46 };

      System.Diagnostics.Trace.WriteLine(string.Join(",", data);

      输出结果:10,5,48,72,14,2,88,46

    2、将字节数组转化为十六进制表现形式(BitConverter.ToString)

      byte[] data = new byte[] { 10, 5, 48, 72, 14, 2, 88, 46 };

      System.Diagnostics.Trace.WriteLine(BitConverter.ToString(data).Replace("-",","));

      输出结果:0A,05,30,48,0E,02,58,2E

    3、字节数组截取

      byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

      如果截取2位、4位或者8位长度的字节数组,可以分别用 BitConverter.ToInt16、BitConverter.ToInt32、BitConverter.ToInt64截取,例如,从第3位开始截取4个字节则 BitConverter.ToInt32(data,3);

      如果截取的位数不规则,则使用另一种方法,例如,从第5位开始截取3个字节则 data.Skip(5).Take(3).ToArray();

     4、List<>集合中同一元素判断

      List.Exists(obj => obj =="XXX"){};

    5、保留一位小数

      float ff = 1.01f;

      a、string value = ff.ToString("0.0"); 或者value = ff.ToString("#0.0"); #:用#代表实际位数 0:用0填充不足的位数(0的位置表示必须有,如果没有用0填充,#的位置表示可有可无)

      b、string value = String.Format("{0:F1}",ff);

    6、socket创建失败

      Socket rawSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);

      提示:以一种访问权限不允许的方式做了一个访问套接字的尝试,原因是由于软件没有以管理员的方式打开造成

    7、IOControl(IOControlCode ioControlCode, byte[] optionInValue, byte[] optionOutValue)中的参数

      ioControlCode:一个 IOControlCode 值,它指定要执行的操作的控制代码

      optionInValue:

      在C++中第二个参数不是数组而是结构体:

      struct tcp_keepalive 

      {

         u_long  onoff; //是否启用Keep-Alive

        u_long  keepalivetime; //多长时间后开始第一次探测(单位:毫秒)

        u_long  keepaliveinterval; //探测时间间隔(单位:毫秒)

      }

      optionOutValue:包含由操作返回的输出数据

     8、SetSocketOption(SocketOptionLevel optionLevel, SocketOptionName optionName, int optionValue)中的参数

      optionLevel:SocketOptionLevel 值之一(参考MSDN)

      optionName:SocketOptionName 值之一(参考MSDN)

      optionValue:参传一个非零值,也可以传True,如果要禁用的话,就传 False

     9、Windows上没法用socket抓MAC层的数据,只能用raw socket抓到IP层及之上的数据

    10、网络字节序

      网络字节序一般是指大端传输

      大小端概念:

      大端(Big-Endian),小端(Little-Endian)以及网络字节序的概念在编程中经常会遇到,其中网络字节序(Network Byte Order)一般是指大端(Big-Endian,对大部分网络传输协议而言)传输,大端小端的概念是面向多字节数据类型的存储方式定义的,小端就是低位在前(低位字节存在内存低地址,字节高低顺序和内存高低地址顺序相同),大端就是高位在前,(其中“前”是指靠近内存低地址,存储在硬盘上就是先写那个字节)。概念上字节序也叫主机序

    •   大小端是面向多字节类型定义的,比如2字节、4字节、8字节整型、长整型、浮点型等,单字节的字符串一般不用考虑
    •   大端小端存储、传输、以及接收处理需要对应
    •   大端(Big-Endian)就是高字节(MSB)在前,内存存储体现上,数据的高位更加靠近低地址
    •   小端(Little-Endian)就是低字节(LSB)在前,内存存储体现上,数据的低位更加靠近低地址

      c#中已经提供了网络转主机,主机转网络的字节序的函数:IPAddress.HostToNetworkOrder、IPAddress.NetworkToHostOrder

    11、去掉字符串中的某些字符

      String.Replace:str = str.Replace(" ", string.Empty).Replace(" ", string.Empty).Replace(" ", string.Empty);

      Regex.Replace:str = Regex.Replace(str, "[ ]", string.Empty, RegexOptions.Compiled);

    12、系统时间获取格式

      System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff"); 如:2011-7-18 15:05:32 956 

    13、静态锁与非静态锁

      private static readonly object Locker1 = new object();

      private readonly object Locker2 = new object();

      单实例非静态锁,线程没有并发(加锁成功);

      单实例静态所,线程没有并发(加锁成功);

      多实例非静态所,线程并发(加锁失败);

      多实例静态所,线程没有并发(加锁成功)

  • 相关阅读:
    快速幂和矩阵快速幂-模板
    gcd-模板+最小公倍数
    manacher-模板-hd-3068
    kmp-模板-hd-1711
    链式前向星-邻接表--模板
    poj-3096-Suprising Strings
    hihocoder-1615-矩阵游戏II
    hihocoder-Week174-Dice Possibility
    论文-Swish: A self-gated Active Function
    hihocoder-1595-Numbers
  • 原文地址:https://www.cnblogs.com/yeshenmeng/p/9705752.html
Copyright © 2020-2023  润新知