redis源码之大小端转换(endianconv.c)

在这里插入图片描述

💖 简介

redis 源码版本:3.05.04
如需源码,可官网下载或如下直接下载:
链接:https://pan.baidu.com/s/1vl_8UD30xZry4irsgmbdLQ
提取码:mpds

如有理解不对的地方,欢迎各位指出,大家共同交流和学习。 如有帮助,请点赞加支持! 送人玫瑰手有余香!🌹🌹🌹

💖源码学习

源码测试,很简单,不需要讲解。

#define _CRT_SECURE_NO_WARNINGS
#include <stdint.h>
#include <stdio.h>
#include <iostream>
using namespace std;
/* 
小端PC机
16位无符号数小端转大端 
*/
void memrev16(void *p) {
	unsigned char *x = reinterpret_cast<unsigned char*>(p);
	unsigned char t;
	t = x[0];
	x[0] = x[1];
	x[1] = t;
}

void Inmemrev16(unsigned int *p) {
	unsigned int *x = (p);
	unsigned int t;
	t = x[0];
	x[0] = x[1];
	x[1] = t;
}
/* Toggle the 32 bit unsigned integer pointed by *p from little endian to
 * big endian */
void memrev32(void *p) {
	//unsigned char *x = p, t;
	unsigned char *x = reinterpret_cast<unsigned char*>(p);
	unsigned char t;
	t = x[0];
	x[0] = x[3];
	x[3] = t;
	t = x[1];
	x[1] = x[2];
	x[2] = t;
}

/* Toggle the 64 bit unsigned integer pointed by *p from little endian to
 * big endian */
void memrev64(void *p) {
	//unsigned char *x = p, t;
	unsigned char *x = reinterpret_cast<unsigned char*>(p);
	unsigned char t;
	t = x[0];
	x[0] = x[7];
	x[7] = t;
	t = x[1];
	x[1] = x[6];
	x[6] = t;
	t = x[2];
	x[2] = x[5];
	x[5] = t;
	t = x[3];
	x[3] = x[4];
	x[4] = t;
}

uint16_t intrev16(uint16_t v) {
	memrev16(&v);
	return v;
}

uint32_t intrev32(uint32_t v) {
	memrev32(&v);
	return v;
}

uint64_t intrev64(uint64_t v) {
	memrev64(&v);
	return v;
}

int main()
{
	char buf[32];
	sprintf(buf, "12345678");
	memrev16(buf);
	printf("%s\n", buf);//21345678


	
	sprintf(buf, "12345678");
	memrev32(buf);
	printf("%s\n", buf); //43215678
	
   
	sprintf(buf, "12345678");
	memrev64(buf);
	printf("%s\n", buf);//87654321
	
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值