c++ 网络字节转换为原始数据 以及 原始数据打包为网络字节序

 

/*拼接字节转化为long64
param1: 数组地址
param2: 起始字节下标
param3: 结束字节下标
return: 拼接值
*/
unsigned __int64 Hex2long(BYTE *hex_arr, int s, int e)
{
	unsigned __int64 ret = 0i64;
	for (int i = s; i <= e; i++)
	{
        ret |= ((unsigned __int64)hex_arr[i]) << (8 * (e - i));
	}
	return ret;
}

/*拼接字节转化为float
param1: 数组地址
param2: 起始字节下标
param3: 结束字节下标
return: 拼接值
*/
float Hex2float(BYTE *hex_arr, int s, int e)
{
	int ret = 0;
	for (int i = s; i <= e; i++)
	{
        ret |= hex_arr[i] << (8 * (e - i));
	}
	float b = *(float*)&ret;
	return b;
}


/*将long数据按照 高->低位 打包
param1:数据包地址
param2:存放起始字节下标
param3:long数据
param4:类型长度
return:下一个数据的起始字节下标
*/
int Packlong2hex(unsigned char*buf, int s, unsigned _int64 temp, int len)
{
	for (int i = 0; i <len; i++)
	{
        buf[i + s] = temp >> (8 * (len - i - 1)) & 0xFF;
	}
	return s+len;
}

/*将整数从主机字节序转为网络字节序 高->低
param1: 整数值
param2: 类型长度
return: 从高到低的字节数组
*/
unsigned char* Long2hex(unsigned _int64 temp, int len)
{
	unsigned char* buf = new unsigned char[len];
	for (int i = 0; i <len; i++)
	{
        buf[i] = temp >> (8 * (len - i - 1)) & 0xFF;
	}
	return buf;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值