c - MAC 地址的网络字节顺序

标签 c sockets networking mac-address

我正在编写一个代码,该代码要求我解析以 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 将帧数据转换为 shortint 时才会出现问题,...看看ntohs() and friends将网络转换为主机,反之亦然。

关于c - MAC 地址的网络字节顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17398882/

相关文章:

在 C 编程中计算使用 TCP/IP 套接字连接到服务器的客户端数量

java - 尝试使用现有的 ServerSocket 创建新的 Socket 时程序会停止

javascript - 通过socket.io-stream流式传输广播图像

python : How do server come to know of network failure at the client side?

android - 创建TCP套接字时无法识别Android主机名

具有多个客户端的 Java 即时通讯工具无法正常工作

c - 使用 write() 打印 stat 结构时出错

c - 在 C 中分配内存有没有比 malloc/calloc 更好的实现?

java - 在 Netty 中以阻塞模式检查登录

c++ - 在 union 中获取 sizeof 匿名结构