C实现将端口大端网络字节序转为小端的本机字节序,同时提供数学公式和Excel公式计算本地端口

本文解释了网络字节序的大端和小端存储方式,并展示了如何将网络字节序的端口(如20773)转换为本地主机字节序的过程,通过拆分、交换高位和低位实现,以及使用Excel公式进行计算。
摘要由CSDN通过智能技术生成
/**
*网络字节序属于大端存储,即高位数据存于低位,低位存于高位
*小端:低位数据存于低位,高位存于高位
*网络端口占用两个字节,大端模式下前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相当于取整。


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值