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();
单实例非静态锁,线程没有并发(加锁成功);
单实例静态所,线程没有并发(加锁成功);
多实例非静态所,线程并发(加锁失败);
多实例静态所,线程没有并发(加锁成功)