/**
*网络字节序属于大端存储,即高位数据存于低位,低位存于高位
*小端:低位数据存于低位,高位存于高位
*网络端口占用两个字节,大端模式下前8位属于高位,存于低字节,后8位属于氏位,存于高字节
*转化本地字节序只需要将网络字节序位置交换即可,即:高位->低位 低位->高位
**/
#include <stdio.h>
#include <stdint.h>
uint16_t network_to_host(uint16_t port_network) {
// 拆分端口号为高字节和低字节
uint8_t high_byte = port_network >> 8;
uint8_t low_byte = port_network & 0xFF;
// 将高字节和低字节交换位置
uint16_t port_host = (low_byte << 8) | high_byte;
return port_host;
}
int main() {
uint16_t port_network = 20773; // 假设端口号为 20773 的网络字节序
// 将网络字节序转换为主机字节序
uint16_t port_host = network_to_host(port_network);
printf("Port in host byte order: %d\n", port_host);
return 0;
}
数学公式为:
假设网络字节序端口为 20773, 则高位为20773/256取整数部份81 余数为 37
则网络字节序为:|81|37|
只需要将顺序调换一下即是本机字节序:|37|81|
而37在高位,81在低位,计算结果本机字节序:37x256 + 81 = 9553 即是本机字节序端口
使用Excel公式:A1=20773 B1为计算本机字节序端口,公式为:
B1=MOD(20773,256)*256 + INT(20773/256)
其中MOD取模得到余数37,<<8 左移8位放在高位,相当x256, INT相当于取整。
C实现将端口大端网络字节序转为小端的本机字节序,同时提供数学公式和Excel公式计算本地端口
于 2024-04-17 16:32:44 首次发布
本文解释了网络字节序的大端和小端存储方式,并展示了如何将网络字节序的端口(如20773)转换为本地主机字节序的过程,通过拆分、交换高位和低位实现,以及使用Excel公式进行计算。
摘要由CSDN通过智能技术生成