实现一个ntohll
实现一个ntohll当从网络上接收到long long 这样类型的的数据包后,怎么将其转换成 本机的字节流呢?linux系统只提供了ntohs, ntohl 这样的函数, 其实,可以试用rpc/rpc.h中的XDR 来实现该功能:static long long ntohll (long long v){ XDR x; xdrll_t result;
·
实现一个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();
}
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条内容
所有评论(0)