packetlength & 0x00FF中的&用法?

本文详细解释了按位与运算的原理及应用实例,通过具体的数值转换为二进制后的按位与运算过程,帮助读者理解按位运算的计算规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packetlength & 0x00FF中的&是先把&两边的值转换成二进制形式,然后在进行按位运算,其中

按位计算,&两边操作数对应位上全为1时,结果的该位值为1。否则该位值为0。比如:

0x12&0x23 转为二进制为:

B00010010&B00100011,

按位计算结果为B00000010,

即结果为0x02。


``` static byte[] BuildGoosePdu() { List<byte> pdu = new List<byte>(); // APPID (2字节) pdu.AddRange(new byte[] { 0x00, 0x01 }); // Length占位符(2字节) int lengthPos = pdu.Count; pdu.AddRange(new byte[] { 0x00, 0x00 }); // ---------- GOOSE PDU顶层SEQUENCE ---------- List<byte> gooseSequence = new List<byte>(); // 1. 控制块引用 (OCTET STRING) AddBerOctetString(gooseSequence, 0x80, "TestLD/LLN0$GO$gocb01"); // 2. 时间允许值 (INTEGER) AddBerInt(gooseSequence, 0x81, 1000); // 3. 数据集引用 (OCTET STRING) AddBerOctetString(gooseSequence, 0x82, "TestLD/LLN0$dsGOOSE"); // 4. GOOSE ID (OCTET STRING) AddBerOctetString(gooseSequence, 0x83, "GOOSE001"); // 5. 状态号+序列号 (SEQUENCE) List<byte> stSq = new List<byte>(); AddBerInt(stSq, 0x84, 1); // stNum AddBerInt(stSq, 0x85, 0); // sqNum gooseSequence.Add(0xA4); // SEQUENCE标签 AddBerLength(gooseSequence, stSq.Count); gooseSequence.AddRange(stSq); // 6. 测试模式 (BOOLEAN) AddBerBoolean(gooseSequence, 0x85, false); // 7. 配置版本 (INTEGER) AddBerInt(gooseSequence, 0x86, 1); // 8. 数据集成员值(SEQUENCE OF) List<byte> dataSetValues = new List<byte>(); // 示例:布尔量true AddBerBoolean(dataSetValues, 0x87, true); gooseSequence.Add(0xA7); // SEQUENCE OF标签 AddBerLength(gooseSequence, dataSetValues.Count); gooseSequence.AddRange(dataSetValues); // 封装顶层SEQUENCE pdu.Add(0x30); // SEQUENCE标签 AddBerLength(pdu, gooseSequence.Count); pdu.AddRange(gooseSequence); // 更新长度字段(总长度-4字节头) int totalLength = pdu.Count - 4; pdu[lengthPos] = (byte)((totalLength >> 8) & 0xFF); pdu[lengthPos + 1] = (byte)(totalLength & 0xFF); return pdu.ToArray(); }```此代码在wireshack上抓包得到的GOOSE PDU格式不正确,请修改成正确的GOOSE报文
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值