//------------------------------------------------------------------------------ // 此代码版权(除特别声明或在XREF结尾的命名空间的代码)归作者本人若汝棋茗所有 // 源代码使用协议遵循本仓库的开源协议及附加协议,若本仓库没有设置,则按MIT开源协议授权 // CSDN博客:https://blog.csdn.net/qq_40374647 // 哔哩哔哩视频:https://space.bilibili.com/94253567 // Gitee源代码仓库:https://gitee.com/RRQM_Home // Github源代码仓库:https://github.com/RRQM // API首页:https://www.yuque.com/rrqm/touchsocket/index // 交流QQ群:234762506 // 感谢您的下载和使用 //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ using System; using System.Collections.Generic; namespace TouchSocket.Core { /// /// BytesExtension /// public static class BytesExtension { #region 字节数组扩展 /// /// 转Base64。 /// /// /// public static string ToBase64(this byte[] data) { return Convert.ToBase64String(data); } /// /// 索引包含数组。 /// /// 例如:在{0,1,2,3,1,2,3}中搜索{1,2},则会返回list:[2,5],均为最后索引的位置。 /// /// /// /// /// /// /// public static List IndexOfInclude(this byte[] srcByteArray, int offset, int length, byte[] subByteArray) { int subByteArrayLen = subByteArray.Length; List indexes = new List(); if (length < subByteArrayLen) { return indexes; } int hitLength = 0; for (int i = offset; i < length; i++) { if (srcByteArray[i] == subByteArray[hitLength]) { hitLength++; } else { hitLength = 0; } if (hitLength == subByteArray.Length) { hitLength = 0; indexes.Add(i); } } return indexes; } /// /// 索引第一个包含数组的索引位置,例如:在{0,1,2,3,1,2,3}中索引{2,3},则返回3。 /// 如果目标数组为null或长度为0,则直接返回offset的值 /// /// /// /// /// /// public static int IndexOfFirst(this byte[] srcByteArray, int offset, int length, byte[] subByteArray) { if (length < subByteArray.Length) { return -1; } if (subByteArray == null || subByteArray.Length == 0) { return offset; } int hitLength = 0; for (int i = offset; i < length + offset; i++) { if (srcByteArray[i] == subByteArray[hitLength]) { hitLength++; } else { hitLength = 0; } if (hitLength == subByteArray.Length) { return i; } } return -1; } /// /// 字节数组转16进制字符 /// /// /// /// /// /// public static string ByBytesToHexString(this byte[] buffer, int offset, int length, string splite = default) { if (string.IsNullOrEmpty(splite)) { return BitConverter.ToString(buffer, offset, length).Replace("-", string.Empty); } else { return BitConverter.ToString(buffer, offset, length).Replace("-", splite); } } #endregion 字节数组扩展 } }