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数组互转相关推荐

  1. java double 转 byte数组_Java基本类型与byte数组的转换

    Java基本类型与byte数组之间相互转换: package cn.teaey.utils; import java.nio.charset.Charset; public class ByteUti ...

  2. byte数组转blob类型_Blob类型转换为byte数组类型

    Blob类型转换成byte数组类型存储到Oracle数据库 import java.io.BufferedInputStream; import java.io.IOException; import ...

  3. java byte转int原理_java中int与byte数组互转代码详细分析

    在java中,可能会遇到将int转成byte[]数组,或者将byte[]数组转成int的情况.下面我们来思考下怎么实现? 首先,分析int在java内存中的存储格式. 众所周知,int类型在内存中占4 ...

  4. 二进制样式的字符串与byte数组互转函数示例

    开发时用到的方法,记录下: /// <summary>/// 测试方法 /// </summary>private void TestFun(){Response.Write( ...

  5. C#通信,结构体和byte数组互转

    在C#进行UDP或者TCP/IP通信时,经常要用到byte数组来传递信息.一开始,我是使用BitConverter和Encoding来进行转换.后来经过大神指导,其实一切不必那么麻烦.只需将要发送的信 ...

  6. Java 16进制与byte数组互转

    一个十六进制数(Hex),正好为4个二进制位.一个字节(byte)为8个二进制位.因此,一个字节可表示为两个十六进制数字.我们可以将一个byte用两个Hex表示,同理,我们也可以将两个Hex转换为一个 ...

  7. Java数字类型转byte数组

    文章目录 方法1 自己写 int转byte数组 byte数组转int 参考:https://blog.csdn.net/qq_41054313/article/details/88424454 方法2 ...

  8. byte数组转blob类型_Java类型相互转换byte[]类型,blob类型

    在我们的程序开发当中,经常会用到java.sql.Blob.byte[].InputStream之间的相互转换,但在JDK的API当中,又没有直接给我们提供可用的API,下面的程序片段主要就是实现它们 ...

  9. 【delphi】Byte数组与String类型的转换

    string string = AnsiString = 长字符串,理论上长度不受限制,但其实受限于最大寻址范围2的32次方=4G字节: 变量Str名字是一个指针,指向位于堆内存的字符序列,字符序列起 ...

最新文章

  1. Idea项目遇到的错误整理
  2. 解决: AttributeError: module 'cv2' has no attribute 'SURF'
  3. java实现生产者和消费者模式
  4. 盘点2020中国IT上市企业100强,贵司上榜了吗?
  5. vue2.0 实现click点击当前li,动态切换class
  6. golang防止MySQL注入_mysql – 如何最大限度地降低golang服务中下游服务中SQL注入的风险?...
  7. 【数据库实验课堂】实验一:数据库的管理
  8. centos和redhat启用epel软件库
  9. linux不写日志,linux 重要日志
  10. C语言课后习题(27)
  11. 液晶拼接处理器_液晶拼接屏方案的制作和规划
  12. 准备 Kendo UI 开发环境
  13. 解决extremeComponents中文按拼音排序问题
  14. MeGUI 压片之新手上路
  15. 盘点15个搞笑的程序员段子
  16. 使用云祺虚拟机备份软件备份H3C CAS 虚拟机
  17. 汇报:阳光事业在阳光下进行
  18. JavaScript新人总结
  19. linux 使用 repotrack 下载 rpm 程序包及其所需依赖
  20. 【seq2seq】深入浅出讲解seq2seq神经网络模型

热门文章

  1. C语言编写实心六芒星,任务接收.代号六芒星(前篇)
  2. 问的人太多,受不了,提前开售了,美杜莎、比比东还有...
  3. 【社区分享 - 游戏篇】AWS云科技助力游戏内容开发 - 游戏项目构建篇 运行篇 增长篇
  4. VMware安装虚拟机(小白看了都会哦)
  5. 王者荣耀暃技能是什么
  6. 我也是LeetCode周赛“三道题选手”啦 第270场周赛
  7. 20162329 张旭升 实验二:实验报告
  8. 巴特沃斯滤波器应用场合_巴特沃斯、切比雪夫、贝塞尔滤波器的区别
  9. 你学废了Python的max函数与min函数的妙用吗?
  10. Excel 里min函数如何使用