关于C#中Bitarray类与比特序、字节序的问题
最近要用C#写一个网络协议处理相关的小程序,因为要逐比特进行处理,所以就看上了效率更高的Bitarray类。但在实际应用的时候发现处理结果总是不对,最终找到问题出在Bitarray中数据的存储顺序上。
直至将流读取出来还没有任何问题,但放进Bitarray之后就出现了字节内8个比特倒序的问题,也就是一个字节的高位在前还是低位在前的问题。稍微查了一下发现这有可能是机器的大端和小段存储的区别,而目前的总线基本都能将内存存储的字节序归一化处理,但字节内的比特序就不同了,它仍然会受到机器大端存储、小端存储差别的影响。
那么请问,将字节数据放入Bitarray类内时,它的比特序真的取决于机器的大小端存储模式吗?是不是我换一类机器,比特顺序就又会颠倒过来?如果是,运行时是否需要检测机器的存储模式,怎么检测?
另外,不同的网络协议也会有字节内比特序读取顺序的要求,那么像wireshark这类协议分析软件以及我们常见的协议证书又是如何解决这一问题的?
最近要用C#写一个网络协议处理相关的小程序,因为要逐比特进行处理,所以就看上了效率更高的Bitarray类。但在实际应用的时候发现处理结果总是不对,最终找到问题出在Bitarray中数据的存储顺序上。
直至将流读取出来还没有任何问题,但放进Bitarray之后就出现了字节内8个比特倒序的问题,也就是一个字节的高位在前还是低位在前的问题。稍微查了一下发现这有可能是机器的大端和小段存储的区别,而目前的总线基本都能将内存存储的字节序归一化处理,但字节内的比特序就不同了,它仍然会受到机器大端存储、小端存储差别的影响。
那么请问,将字节数据放入Bitarray类内时,它的比特序真的取决于机器的大小端存储模式吗?是不是我换一类机器,比特顺序就又会颠倒过来?如果是,运行时是否需要检测机器的存储模式,怎么检测?
另外,不同的网络协议也会有字节内比特序读取顺序的要求,那么像wireshark这类协议分析软件以及我们常见的协议证书又是如何解决这一问题的?