
C#
g0415shenw
Stay hungry,Stay foolish
音视频交流群:759117824
GB28181技术交流群:708251501
UE4技术交流群:1036326334
展开
-
C#之float数组转字节流
参考如下代码: static void Float2Byte() { float[] _managed_data = new float[2]; _managed_data[0] = 888.1111f; _managed_data[1] = 888.133f; GCHandle unmanaged_data_handle = GCHandle.Alloc(_managed.原创 2020-11-26 22:12:30 · 1677 阅读 · 0 评论 -
C#之判断Mysql数据库表是否存在
涉及到的SQL语句如下:判断表是否存在:select count(*) as A from information_schema.tables where table_name = 'test' and table_schema ='test1'创建表:CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, ...原创 2020-02-04 16:01:40 · 2378 阅读 · 3 评论 -
C#之判断Mysql数据库是否存在
今天想实现一个功能,程序能自动创建数据库,采用C#实现。涉及到的相关SQL语句如下:判断数据库是否存在:select Count(*) as A from information_schema.schemata where schema_name='test1'创建数据库CREATE DATABASE test1部分代码如下: DBMysql...原创 2020-02-04 15:49:50 · 2499 阅读 · 4 评论 -
C#之list排序
我有一个list,需要根据某个数进行排序,举个例子 class TOrder { public int Order { get; set; } public string Name { get; se...原创 2019-11-12 20:54:46 · 378 阅读 · 0 评论 -
C#之josn
这里采用下面的库用法如下:添加引用:using Newtonsoft.Json;序列化成字符串: var Json = JsonConvert.SerializeObject(param);效果如下:原创 2019-11-12 13:49:44 · 308 阅读 · 0 评论 -
C#之向文件追加内容
第一个参数是文件路径,第二个参数是文本字符串 public static void FileAdd(string Path, string strings) { StreamWriter sw = File.AppendText(Path); sw.Write(strings); sw.Fl...原创 2019-11-06 16:55:22 · 1420 阅读 · 0 评论 -
C#之Xml去掉前面的空格
使用xml序列化之后的xml会再前面增加很多空格,而这些空格在gb28181对接中不能有空格,疯掉了,查了我1天,就是目录树怎么都出不来。现在写个函数,把空格去掉。public static void TrimXml(string xml) { StringBuilder xmlSb = new StringBuilder(); ...原创 2019-03-20 14:40:58 · 1373 阅读 · 0 评论 -
C#之根据域名获取IP地址
IPHostEntry host = Dns.GetHostEntry("www.baidu.com"); foreach(var va in host.AddressList) { Console.WriteLine(va.ToString()); } ...原创 2019-03-19 21:10:52 · 1028 阅读 · 0 评论 -
C#之xml序列化
前面其实已经说过xml的序列化与反序列化,这次主要是介绍两个属性第一个是[XmlRootAttribute("file")]可以修改根节点的名称为file第二个:[XmlElement("Item")]可以修改后续的类的节点为Item我们举个例子:定义如下:#region RecordFileBlock //录像文件块的xml格式定义 [Ser...原创 2019-03-04 16:27:18 · 2209 阅读 · 0 评论 -
C#之int自增长
很多时候,我们使用一个int 的自增长来唯一标识一个命令。但是,当int增长到最大之后,他的值会是多少呢?我开始以为是0,但是,写了个demo,发现是负值。示例如下: var aa = int.MaxValue; Console.WriteLine(aa); aa = aa + 1; C...原创 2019-03-06 13:49:47 · 1356 阅读 · 0 评论 -
C#之DateTime
DateTime 居然不能初始化为null那么问题来了,如果我写一个属性,不赋值的话?默认是什么呢?下面尝试一下 static void Main(string[] args) { Console.WriteLine(DateTime); Console.WriteLine(DateTime.MinV...原创 2019-03-08 14:50:14 · 364 阅读 · 0 评论 -
C#之获取系统cpu
这里用了下面这个库https://github.com/openhardwaremonitor/openhardwaremonitor获取到的信息还挺全的,截图如下:现在需要把源码拿回来进行研究,如何去动态获取第一个函数:private void timer_Tick(object sender, EventArgs e)如下图:这个函数会定期去获取信息...原创 2019-03-25 11:47:44 · 1229 阅读 · 0 评论 -
C#之生成随机数
Random rd = new Random(); Console.WriteLine(rd.Next(32, 35)); Console.WriteLine(rd.Next(32, 35)); Console.WriteLine(rd.Next(32, 35)); Conso...原创 2019-03-25 17:18:44 · 2897 阅读 · 0 评论 -
C#之json序列化与反序列化
http://106.86.154.29:5191/jsdecoder.wasmhttp://106.86.154.29:5191/webgl.jshttp://106.86.154.29:5191/jsdecoder.jsxml前面已经研究过了,下面开始研究一下json这里推荐一个网址,可以做json序列化与反序列化http://www.bejson.com/jsone...原创 2019-03-27 14:27:10 · 395 阅读 · 0 评论 -
C#之ActionBlock异步关闭死锁
今天在调试程序遇到一个场景,死锁是必现的,就在在关闭ActionBlock的时候出现的,代码如下: static async void Tt() { var rsp =await CloseTt().ConfigureAwait(false); Console.WriteLine("threadid = {0} e...原创 2019-04-13 14:36:26 · 2415 阅读 · 0 评论 -
C#之double内存
int的内存如何表示,基本上很清楚了,但是double的内存如何布局的?有点懵,最近在做flv格式的时候,刚好要用到,所以,就研究一下。这里是网络字节序表示。写个小demo Double duration = 1; var bd = BitConverter.GetBytes(duration);总结:double暂用8个...原创 2019-06-09 11:10:26 · 869 阅读 · 0 评论 -
C#之double网络字节序
我现在需要发送一个double数据,通过socket发送,但是是网络字节序,但是C#并没有提供相关的api,这里,我想到一个思路,由于long 也是8个字节,所以,我先把double转成内存一样的long数据,再转成网络字节序的long 最后,再转成内存一样大的double,实例如下: static Double DoubleHostToNetworkOrder(Dou...原创 2019-06-09 11:32:21 · 1069 阅读 · 0 评论 -
C#之DotfuscatorCommunity
参考微软下面的博客https://docs.microsoft.com/zh-cn/visualstudio/ide/dotfuscator/install?view=vs-2017原创 2019-07-19 21:15:36 · 927 阅读 · 0 评论 -
C#之MEF
最近在研究MEF,我现在有一个需求,首先是要实现解耦,那么我每个动态库必须互相没有依赖。然后就是动态加载的问题。以前研究过MEF的自动加载,但是,有一点不能满足我的需求,应为好像只能加载一个实例,我有时候需要加载多个实例。还是老规矩先提需求,再研究解决方案。1,能否创建多个实例?而且当有多个模块同时继承某个接口的时候,创建指定的模块多个实例?目前就这一个需求吧。https...原创 2019-10-11 17:51:03 · 547 阅读 · 0 评论 -
C#之单元测试
很多核心代码,不能等到程序运行的时候,才能知道是否可以运行,很多时候单单凭借肉眼,无法真正确认代码没有问题。这个时候,我们就可以用单元测试发挥作用了。函数需要是public,才行,所以我把private函数都修改为public的。直接右键函数:会自动生成一个一个函数:再右键调试测试:打上断点就可以调试了。...原创 2019-03-05 17:47:00 · 1375 阅读 · 0 评论 -
C#之using
C#的using字段使用后,可以自动调用dispose来对资源进行释放,现在有一点点疑惑,如果我在using里面调用了return,还会释放吗?这里写一个测试程序试一下: class Program { static void Main(string[] args) { B bb = new B(); ...原创 2019-02-28 14:09:24 · 1212 阅读 · 0 评论 -
C#之Bcd码时间转成ToDateTime
假设时间为:2018-09-12 14:29:51BCD码时间为 byte[] Bcd = new byte[8]; Bcd[0] = 0x20; Bcd[1] = 0x18; Bcd[2] = 0x09; Bcd[3] = 0x12; Bcd...原创 2018-09-12 14:44:57 · 2797 阅读 · 0 评论 -
c#之文件操作
写文件,这一块我是用了FileStream这个类来实现。流程如下:创建一个文件FileStream m_WriteFs = new FileStream("tttt", FileMode.Create, FileAccess.Write);写文件(写完之后,文件指针为自动转移到末尾,不需要在seek了)string strData = "8884848484"; m_Wr...原创 2018-09-11 14:11:48 · 340 阅读 · 0 评论 -
C#之整数与字符串互转
整数转16进制字符串,不足位置补0:如果超出2位,比如是3位,就是3位。 int ia = 5; string stra = ia.ToString("X2");16进制字符串转整数 string stra = "22"; int ia = Convert.ToInt32(stra,16);...原创 2018-08-29 09:38:01 · 3422 阅读 · 1 评论 -
C#之网络字节序与主机字节序互转
主机字节序转网络字节序//加上两个字节长度,再发送 byte[] bSend = new byte[buffer.Length + 2];byte[] bLenth = BitConverter.GetBytes((ushort)IPAddress.HostToNetworkOrder((short)buffer.Length));bSend[0] = bLenth[0];bSend...原创 2018-08-30 17:22:29 · 2613 阅读 · 0 评论 -
C#之Unix时间和北京时间互转
Unix时间起始时间为1970年1月1日0时0分0秒北京时间起始时间为1970年1月1日8时0分0秒北京时间转Unix时间如下: DateTime dtUnix = new DateTime(1970, 1, 1,8,0,0); DateTime dtStartTime = Convert.ToDateTime(strSt...原创 2018-08-27 14:38:06 · 916 阅读 · 0 评论 -
C#TcpClien网络通信之内存泄漏
最近好倒霉,查了一周的内存泄漏,终于有了着落,开始是异步导致GCC不回收,现在又出现了异步发送导致内存不回收。上代码:网络发送: byte[] bsend = Encoding.GetEncoding("gb2312").GetBytes(stringBuilder.ToString()); m_ns.BeginWrite(bsend,...原创 2018-07-20 14:31:17 · 1053 阅读 · 3 评论 -
C#之异步编程
微软提供了大量的异步API供我们使用,比如网络api,http协议的api等等,十分方便。在熟练掌握异步编程之后,我尝试自己写一个异步库,主要是tcp网络通信方面的,协议是私有协议,我在私有协议的基础上再封装一层供应用层调用。但是我发现问题没那么简单,其他的都比较简单,task 之类,难点在一个地方:请求------------------------------》网络等待--------...原创 2018-07-19 18:27:53 · 376 阅读 · 0 评论 -
C#之异步导致内存泄漏
C#4.5的新特性,异步处理,同步的编码方式,大大的提高了编程效率。但是今天却由于异步的使用,导致了一个非常严重的内存泄漏。崩溃截图:由于本程序是用纯C#开发,不存在非托管内存,而且没有使用静态变量,为什么还是会有内存泄漏了。迷茫了一个上午。快到中午的时候,一个偶然的机会,执行了异常清理,就是把异步等待进行超时处理之后,内存立马降下来了。很快定位原因出在await一直没有得到应...原创 2018-07-19 14:44:36 · 2609 阅读 · 0 评论 -
C#之时间操作
DataTime转换成指定格式的字符串DateTime now = DateTime.Now;string strTime = now.ToString("yyyyMMdd_HHmmss");其中:yyyy 表示年MM表示月dd表示日HH表示小时mm表示分钟ss表示秒fff表示毫秒记住这里是区分大小写的 ***********************...原创 2018-09-13 11:31:19 · 393 阅读 · 0 评论 -
C#之与C库交互
导入C封装的库如下:public const string RelativeDir = "..\\ThirdPartySdk\\Test\\"; [DllImport(RelativeDir + "HCSDK.dll")] public static extern bool NET_Init();C#结构体与C#结构体互转 [StructLayout(Layout...原创 2018-09-25 16:28:06 · 817 阅读 · 0 评论 -
C#之http transfer-Encoding模式
参考:https://www.cnblogs.com/xuehaoyue/p/6639029.html transfer-Encoding 先写个大概,回家在研究分块编码(Transfer-Encoding: chunked)Transfer-Encoding,是一个 HTTP 头部字段(响应头域),字面意思是「传输编码」。最新的 HTTP 规范里,只定义了一种编码传输:分块编...原创 2019-01-07 17:36:13 · 1712 阅读 · 0 评论 -
C#之文件监听
有时候,我们需要把一些信息保存在配置文件里面,又希望如果修改了配置文件,程序可以自动生效。这里可以用文件监听来实现。使用了C#提供的FileSystemWatcher先看结果: 由于每次修改文件都会出发两次提示,据说是第一次修改文件内容,第二次修改文件时间,但是我们只需要处理一次就可以了。由于我对时间不是太敏感,所以我加了一个定时器进行过滤,每1秒处理一次文件内容修改。这样...原创 2018-12-15 10:29:33 · 1301 阅读 · 0 评论 -
C#之tpl
tpl是微软的一个高性能线程模型,我们可以不需要进行麻烦的线程管理,直接使用。使用方法如下:创建: private ActionBlock<Action> m_BusinessAction = null; m_BusinessAction = new ActionBlock<Action>(d => ...原创 2018-11-30 11:23:48 · 1262 阅读 · 0 评论 -
C#之开启线程
线程可以看成是个干苦力的马车,就是干活的。开启线程: bool m_WorkFlag = true; m_WorkThread = new Thread(new ThreadStart(() => { ...原创 2018-11-29 14:02:06 · 421 阅读 · 0 评论 -
C#之获取网卡IP地址
有时候不想读取配置文件来进行网络监听,默认把本级所有IP地址监听一遍,这个时候就需要获取本级所有IP地址。如下: string name = Dns.GetHostName(); IPAddress[] ipadrlist = Dns.GetHostAddresses(name); try {...原创 2018-11-29 10:23:35 · 1635 阅读 · 0 评论 -
C#之定时器
某些时候,如果想一直干一件事情,又不想开线程,可以考虑定时器。 代码如下: m_Timer = new System.Threading.Timer((o) => { }, 0, 10, 1000); ...原创 2018-11-20 22:16:29 · 829 阅读 · 0 评论 -
C#之xml配置文件读写
我们经常把xml存放在配置文件里面,这里详细讲述xml在配置文件的写入与读取相关逻辑 写入文件: string szRootPath = System.AppDomain.CurrentDomain.BaseDirectory; string szPath = szRootPath + "config.xml"; ...原创 2018-10-20 19:25:15 · 809 阅读 · 0 评论 -
C#之多线程容器
一直使用Dictionary容器,但是这个容器不是线程安全的,需要加锁,感觉十分繁琐。这里有一个新的容器:ConcurrentDictionary 支持多线程安全引用如下命名空间即可using System.Collections.Concurrent; ...原创 2018-09-28 13:37:31 · 1398 阅读 · 0 评论 -
基于C#net4.5websocket客户端与服务端
只支持win8以上系统以及windows server2012以上系统最近在研究视频传输给浏览器,然后使用H5标签解码。视频流采用websocket传输。所以研究了一下C#的websocket。首先使用HttpListener进行侦听,HttpListener监听需要启动管理员权限才能运行,或者注册该端口,注册如下:已管理员身份运行cmd.exe 输入下面两个命令netsh http...原创 2018-05-18 17:13:52 · 26623 阅读 · 1 评论