我正在编写一个代码,该代码要求我解析以 uint8_t * 指针形式接收的传入帧。
我已经编写了一个实用方法来从帧中获取 mac 地址并将其转换为 uint64_t 值以便于计算。
uint64_t addr = uint64_t(_frm_ptr[0]) << 40 | uint64_t(_frm_ptr[1]) << 32 |
uint64_t(_frm_ptr[2]) << 24 | uint64_t(_frm_ptr[3]) << 16 |
uint64_t(_frm_ptr[4]) << 8 | uint64_t(_frm_ptr[5]);
我需要知道如果源 mac 地址是大端格式的“b8:ac:6f:c0:3d:25”,它会以相同的顺序传输吗?
mac地址是如何在网络上传输的?
上面的代码片段是否适用于所有平台?
最佳答案
帧中的字节是固定顺序的(@Caleb 指出的大端顺序),与主机的字节顺序无关。
因为你是一个一个地复制字节,所以这总是有效的。只有当您使用多字节分配或 memcpy
将帧数据转换为 short
、int
时才会出现问题,...看看ntohs()
and friends将网络转换为主机,反之亦然。
关于c - MAC 地址的网络字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398882/