题设:
SOCKET传输XML报文,格式为LENGTH+VALUE
“目前我们的报文长度处理方式为报文头前4位:例,长度为5000的报文。将5000转为2进制形式,在头部补齐32位,转为4个字节固定在报文头,5000转为32位2进制后是00000000000000000001001110001000”
怎么实现?00000000000000000001001110001000只有4个字节的表示,本人始终理解不了。
SOCKET传输XML报文,格式为LENGTH+VALUE
“目前我们的报文长度处理方式为报文头前4位:例,长度为5000的报文。将5000转为2进制形式,在头部补齐32位,转为4个字节固定在报文头,5000转为32位2进制后是00000000000000000001001110001000”
怎么实现?00000000000000000001001110001000只有4个字节的表示,本人始终理解不了。
解决方案
15
第一个例子本人错写了一个 Writer 名字写成了“文本方式”写入,这就使得解析端必须按照文本方式解析。
重新写一个“二进制方式写入”的例子
重新写一个“二进制方式写入”的例子
var st = new MemoryStream(); var sw = new BinaryWriter(st); sw.Write(data.Length); sw.Flush(); st.Position = 4; st.Write(data, 0, data.Length); var result = st.ToArray(); sw.Close();
5
不就是 Inte32 吗?
本来他只需说是 unsigned long 类型就可以了,但是现在 64位 兼容系统多了起来,仅这样说就容易产生误解
例如 C# 中 long 对应的是 Int64(8个字节),而低端环境是不能直接处理 64位 整数的
所以,为了维持协议的稳定性,就做出了那个绕口的说明
本来他只需说是 unsigned long 类型就可以了,但是现在 64位 兼容系统多了起来,仅这样说就容易产生误解
例如 C# 中 long 对应的是 Int64(8个字节),而低端环境是不能直接处理 64位 整数的
所以,为了维持协议的稳定性,就做出了那个绕口的说明