c++基本类型与 byte数组互转
c++ 基本类型与byte 数组互相转换
前言
由于根据编译器的不同 有部分基础数据类型字节数不一致本文档 基础类型位数如下bool 字节数: 1char 字节数: 1short 字节数: 2int 字节数: 4long 字节数: 4long long 字节数: 8float 字节数: 4double 字节数: 8long double 字节数: 12
说明
传统C方式 位操作: 使用一个unsigned int变量来作为位容器。强制指针类型转换。
由于C++ 中没有Bety 类型 所以 typedef unsigned char byte;
INT 与 byte数组互转
/*** convert int type to byte array*/static void intToByte(int i, byte* bytes);/*** convert byte array to int type*/static int bytesToInt(byte* bytes);void ByteUtil::intToByte(int i, byte* bytes)
{size_t length = sizeof(int);// 初始化数组memset(bytes, 0, sizeof(byte) * length);bytes[0] = (byte)(0xff & i);bytes[1] = (byte)((0xff00 & i) >> 8);bytes[2] = (byte)((0xff0000 & i) >> 16);bytes[3] = (byte)((0xff000000 & i) >> 24);return;
}int ByteUtil::bytesToInt(byte* bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。int addr = bytes[0] & 0xFF;addr |= ((bytes[1] << 8) & 0xFF00);addr |= ((bytes[2] << 16) & 0xFF0000);addr |= ((bytes[3] << 24) & 0xFF000000);return addr;
}
long与 byte数组互转
/*** convert long type to byte array*/static void longToByte( long i, byte* bytes);/*** convert byte array to long type*/static long bytesToLong(byte* bytes);void ByteUtil::longToByte(long i, byte *bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。size_t length = sizeof(long);memset(bytes, 0, sizeof(byte) * length);bytes[0] = (byte)(0xff & i);bytes[1] = (byte)((0xff00 & i) >> 8);bytes[2] = (byte)((0xff0000 & i) >> 16);bytes[3] = (byte)((0xff000000 & i) >> 24);
}long ByteUtil::bytesToLong(byte *bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。long addr = bytes[0] & 0xFF;addr |= ((bytes[1] << 8) & 0xFF00);addr |= ((bytes[2] << 16) & 0xFF0000);addr |= ((bytes[3] << 24) & 0xFF000000);return addr;
}
LONG LONG 与 byte数组互转
/*** convert long long type to byte array*/static void longLongToByte( long long i, byte* bytes);/*** convert byte array to long long type*/static long long bytesToLongLong(byte* bytes);void ByteUtil::longLongToByte(long long i, byte* bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。size_t length = sizeof(long long);memset(bytes, 0, sizeof(byte) * length);bytes[0] = (byte)(0xff & i);bytes[1] = (byte)((0xff00 & i) >> 8);bytes[2] = (byte)((0xff0000 & i) >> 16);bytes[3] = (byte)((0xff000000 & i) >> 24);bytes[4] = (byte)((0xff00000000 & i) >> 32);bytes[5] = (byte)((0xff0000000000 & i) >> 40);bytes[6] = (byte)((0xff000000000000 & i) >> 48);bytes[7] = (byte)((0xff00000000000000 & i) >> 56);
}long long ByteUtil::bytesToLongLong(byte* bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。long long addr = bytes[0] & 0xFF;addr |= ((bytes[1] << 8) & 0xFF00);addr |= ((bytes[2] << 16) & 0xFF0000);addr |= ((bytes[3] << 24) & 0xFF000000);addr |= ((((long long) bytes[4]) << 32) & 0xFF00000000);addr |= ((((long long) bytes[5]) << 40) & 0xFF0000000000);addr |= ((((long long) bytes[6]) << 48) & 0xFF000000000000);addr |= ((((long long) bytes[7]) << 56) & 0xFF00000000000000);return addr;
}
short 与 byte数组互转
/*** convert Short type to byte array*/static void shortToByte(short i, byte* bytes);/*** convert byte array to Short type*/static short bytesToShort(byte* bytes);void ByteUtil::shortToByte(short i, byte* bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。size_t length = sizeof(short);//byte[] bytes = new byte[4];memset(bytes, 0, sizeof(byte) * length);bytes[0] = (byte)(0xff & i);bytes[1] = (byte)((0xff00 & i) >> 8);return;}short ByteUtil::bytesToShort(byte* bytes)
{// 位操作时 使用一个unsigned int变量来作为位容器。short addr = bytes[0] & 0xFF;addr |= ((bytes[1] << 8) & 0xFF00);return addr;
}
double 与 byte数组互转
/*** convert byte array to double type*/static double bytesToDouble(byte bytes[]);/*** c++ double type length is 8 byte* convert double type to byte array*/static void doubleTobytes(double data, byte bytes[]);double ByteUtil::bytesToDouble(byte bytes[])
{// 位操作时 使用一个unsigned int变量来作为位容器。double data = *((double*)bytes);return data;
}void ByteUtil::doubleTobytes(double data, byte bytes[])
{// 位操作时 使用一个unsigned int变量来作为位容器。int i;size_t length = sizeof(double);char* p = (char*)&data;for (i = 0; i < length; i++){bytes[i] = *p++;}
}
long double 与 byte数组互转
/*** convert byte array to double type*/static long double bytesToLongDouble(byte bytes[]);/*** c++ double type length is 8 byte* convert long double type to byte array*/static void longDoubleTobytes(long double data, byte bytes[]);long double ByteUtil::bytesToLongDouble(byte bytes[])
{// 位操作时 使用一个unsigned int变量来作为位容器。long double data = *((long double *)bytes);return data;
}void ByteUtil::longDoubleTobytes(long double data, byte bytes[])
{// 位操作时 使用一个unsigned int变量来作为位容器。int i;size_t length = sizeof(long double);char* p = (char*)&data;for (i = 0; i < length; i++){bytes[i] = *p++;}}
float 与 byte数组互转
/*** convert byte array to float type* C语言可用*/static float bytesToFloat(byte bytes[]);/*** convert float type to byte array*/static void floatTobytes(float data, byte bytes[]);float RKByteUtil::bytesToFloat(byte bytes[])
{// 位操作时 使用一个unsigned int变量来作为位容器。return *((float*)bytes);}void RKByteUtil::floatTobytes(float data, byte bytes[])
{// 位操作时 使用一个unsigned int变量来作为位容器。int i;size_t length = sizeof(float);byte *pdata = (byte*)&data; //把float类型的指针强制转换为unsigned char型for (i = 0; i < length; i++){bytes[i] = *pdata++;//把相应地址中的数据保存到unsigned char数组中}return;
}
bool与 byte数组互转
/*** convert byte array to bool type* C语言可用*/static bool bytesToBool(byte bytes[]);/**** convert bool type to byte array*/static void boolTobytes(bool data, byte bytes[]);bool ByteUtil::bytesToBool(byte bytes[])
{return (bytes[0] & 0x01) == 1 ? true : false;
}void ByteUtil::boolTobytes(bool data, byte bytes[])
{if (data) {bytes[0] = (byte)(0x01 & 1);}else {bytes[0] = (byte)(0x01 & 0);}}
c++基本类型与 byte数组互转相关推荐
- java double 转 byte数组_Java基本类型与byte数组的转换
Java基本类型与byte数组之间相互转换: package cn.teaey.utils; import java.nio.charset.Charset; public class ByteUti ...
- byte数组转blob类型_Blob类型转换为byte数组类型
Blob类型转换成byte数组类型存储到Oracle数据库 import java.io.BufferedInputStream; import java.io.IOException; import ...
- java byte转int原理_java中int与byte数组互转代码详细分析
在java中,可能会遇到将int转成byte[]数组,或者将byte[]数组转成int的情况.下面我们来思考下怎么实现? 首先,分析int在java内存中的存储格式. 众所周知,int类型在内存中占4 ...
- 二进制样式的字符串与byte数组互转函数示例
开发时用到的方法,记录下: /// <summary>/// 测试方法 /// </summary>private void TestFun(){Response.Write( ...
- C#通信,结构体和byte数组互转
在C#进行UDP或者TCP/IP通信时,经常要用到byte数组来传递信息.一开始,我是使用BitConverter和Encoding来进行转换.后来经过大神指导,其实一切不必那么麻烦.只需将要发送的信 ...
- Java 16进制与byte数组互转
一个十六进制数(Hex),正好为4个二进制位.一个字节(byte)为8个二进制位.因此,一个字节可表示为两个十六进制数字.我们可以将一个byte用两个Hex表示,同理,我们也可以将两个Hex转换为一个 ...
- Java数字类型转byte数组
文章目录 方法1 自己写 int转byte数组 byte数组转int 参考:https://blog.csdn.net/qq_41054313/article/details/88424454 方法2 ...
- byte数组转blob类型_Java类型相互转换byte[]类型,blob类型
在我们的程序开发当中,经常会用到java.sql.Blob.byte[].InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们 ...
- 【delphi】Byte数组与String类型的转换
string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起 ...
最新文章
- Idea项目遇到的错误整理
- 解决: AttributeError: module 'cv2' has no attribute 'SURF'
- java实现生产者和消费者模式
- 盘点2020中国IT上市企业100强,贵司上榜了吗?
- vue2.0 实现click点击当前li,动态切换class
- golang防止MySQL注入_mysql – 如何最大限度地降低golang服务中下游服务中SQL注入的风险?...
- 【数据库实验课堂】实验一:数据库的管理
- centos和redhat启用epel软件库
- linux不写日志,linux 重要日志
- C语言课后习题(27)
- 液晶拼接处理器_液晶拼接屏方案的制作和规划
- 准备 Kendo UI 开发环境
- 解决extremeComponents中文按拼音排序问题
- MeGUI 压片之新手上路
- 盘点15个搞笑的程序员段子
- 使用云祺虚拟机备份软件备份H3C CAS 虚拟机
- 汇报:阳光事业在阳光下进行
- JavaScript新人总结
- linux 使用 repotrack 下载 rpm 程序包及其所需依赖
- 【seq2seq】深入浅出讲解seq2seq神经网络模型
热门文章
- C语言编写实心六芒星,任务接收.代号六芒星(前篇)
- 问的人太多,受不了,提前开售了,美杜莎、比比东还有...
- 【社区分享 - 游戏篇】AWS云科技助力游戏内容开发 - 游戏项目构建篇 运行篇 增长篇
- VMware安装虚拟机(小白看了都会哦)
- 王者荣耀暃技能是什么
- 我也是LeetCode周赛“三道题选手”啦 第270场周赛
- 20162329 张旭升 实验二:实验报告
- 巴特沃斯滤波器应用场合_巴特沃斯、切比雪夫、贝塞尔滤波器的区别
- 你学废了Python的max函数与min函数的妙用吗?
- Excel 里min函数如何使用