实现一个ntohll

 

实现一个ntohll

当从网络上接收到long long 这样类型的的数据包后,怎么将其转换成 本机的字节流呢?
linux系统只提供了ntohs, ntohl 这样的函数, 其实,可以试用rpc/rpc.h中的XDR 来实现该功能:

static long long ntohll (long long v)
{
    XDR x;
    xdrll_t result;
    xdrmem_create(&x, (char*) &v, sizeof (v), XDR_DECODE);
    xdr_longlong_t (&x, &result);
    xdr_destroy(&x);
    return result;
}
顺带的,实现一个 从流中读8个字节的函数:
//
// Read a long long (8-byte) value from the input stream
//
bool read_8(istream& is, long long& v)
{
char *p = reinterpret_cast<char *>(&v);
//Reset v!
v = -1;
//Change "v" via pointer "p"
is.read(p,8);
v = ntohll(v);
return is.good();
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值