日期:2014-05-18 浏览次数:20899 次
byte[] bta1 = BitConverter.GetBytes(1001); byte[] bta2 = BitConverter.GetBytes(0); byte[] bta = Encoding.UTF8.GetBytes("dfdfdfdf\0"); Console.WriteLine(BitConverter.ToInt32(bta1, 0)); Console.WriteLine(BitConverter.ToInt32(bta2, 0)); Console.WriteLine(Encoding.UTF8.GetString(bta));
------解决方案--------------------
个人认为,虽然混合在一起节省空间,但处理和维护不容易,因为还要考虑著名的“粘包”问题、传输发生错误等问题。因此,这种设计需要改进,同意1楼的观点。
设计与编写程序,不是技巧上取胜,而是方法和思路为王。
------解决方案--------------------
要不然就是固定格式的,例如1-3字节为int型,4-8字节为string型,等等,直接根据byte是无法判断存储哪种类型的,因为所有信息都是以byte存储、传输的,
再不然就是上面说的加特殊标志
------解决方案--------------------
数字先发送,到接收端,先行把头几个字节截取,然后把余下再组成字符 串
------解决方案--------------------
知道结构是不是可以按byte来读阿,数字就按原样,string就encoding转化一下~
------解决方案--------------------
数字必须知道它存放的位置和类型,string必须知道它存放的位置和长度
这样才可以解析出来
------解决方案--------------------
业务上一定要分清数值和字符串吗? 那恐怕不好办。
全转成string再传。
------解决方案--------------------
你的根据你的 ByteConnector来按BYTE读数据~~
------解决方案--------------------
/// <summary>
/// 快速复制内存,可用于强行的类型转换,必须非安全(unsafe{})块中使用,非必要,不建议使用。
/// </summary>
/// <param name="Destination">目标对象的指针</param>
/// <param name="Source">源对象的指针</param>
/// <param name="Length">要复制的长度(单位:字节)</param>
[DllImport("kernel32.dll", CharSet = CharSet.Auto, EntryPoint = "RtlMoveMemory", CallingConvention = CallingConvention.StdCall)]
public static unsafe extern void CopyMemory(void* Destination, void* Source, int Length);