C++ – 字节数组byte[]或者unsigned char[]与long long的相互转换
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – 字节数组byte[]或者unsigned char[]与long long的相互转换
原文链接:https://www.stubbornhuang.com/2029/
发布于:2022年03月12日 23:08:42
修改于:2022年03月12日 23:09:08

设定long long型长度为8。
1 long long转字节数组
long long型转字节数组byte[]或者unsigned char[]
void LongLongToBytes(long long value, unsigned char* bytes)
{
size_t length = sizeof(long long);
memset(bytes, 0, sizeof(unsigned char) * length);
bytes[0] = (unsigned char)(0xff & value);
bytes[1] = (unsigned char)((0xff00 & value) >> 8);
bytes[2] = (unsigned char)((0xff0000 & value) >> 16);
bytes[3] = (unsigned char)((0xff000000 & value) >> 24);
bytes[4] = (unsigned char)((0xff00000000 & value) >> 32);
bytes[5] = (unsigned char)((0xff0000000000 & value) >> 40);
bytes[6] = (unsigned char)((0xff000000000000 & value) >> 48);
bytes[7] = (unsigned char)((0xff00000000000000 & value) >> 56);
}
2 字节数组转long long
字节数组byte[]或者unsigned char[]转long long型
long long BytesToLongLong(unsigned char* bytes)
{
long long value = bytes[0] & 0xFF;
value |= ((bytes[1] << 8) & 0xFF00);
value |= ((bytes[2] << 16) & 0xFF0000);
value |= ((bytes[3] << 24) & 0xFF000000);
value |= ((((long long)bytes[4]) << 32) & 0xFF00000000);
value |= ((((long long)bytes[5]) << 40) & 0xFF0000000000);
value |= ((((long long)bytes[6]) << 48) & 0xFF000000000000);
value |= ((((long long)bytes[7]) << 56) & 0xFF00000000000000);
return value;
}
3 使用示例
#include <iostream>
void LongLongToBytes(long long value, unsigned char* bytes)
{
// 位操作时 使用一个unsigned int变量来作为位容器。
size_t length = sizeof(long long);
memset(bytes, 0, sizeof(unsigned char) * length);
bytes[0] = (unsigned char)(0xff & value);
bytes[1] = (unsigned char)((0xff00 & value) >> 8);
bytes[2] = (unsigned char)((0xff0000 & value) >> 16);
bytes[3] = (unsigned char)((0xff000000 & value) >> 24);
bytes[4] = (unsigned char)((0xff00000000 & value) >> 32);
bytes[5] = (unsigned char)((0xff0000000000 & value) >> 40);
bytes[6] = (unsigned char)((0xff000000000000 & value) >> 48);
bytes[7] = (unsigned char)((0xff00000000000000 & value) >> 56);
}
long long BytesToLongLong(unsigned char* bytes)
{
// 位操作时 使用一个unsigned int变量来作为位容器。
long long value = bytes[0] & 0xFF;
value |= ((bytes[1] << 8) & 0xFF00);
value |= ((bytes[2] << 16) & 0xFF0000);
value |= ((bytes[3] << 24) & 0xFF000000);
value |= ((((long long)bytes[4]) << 32) & 0xFF00000000);
value |= ((((long long)bytes[5]) << 40) & 0xFF0000000000);
value |= ((((long long)bytes[6]) << 48) & 0xFF000000000000);
value |= ((((long long)bytes[7]) << 56) & 0xFF00000000000000);
return value;
}
int main()
{
unsigned char longlongByteArray[8];
long long a = 10;
LongLongToBytes(a, longlongByteArray);
std::cout << BytesToLongLong(longlongByteArray) << std::endl;
return 0;
}
当前分类随机文章推荐
- C++ - websocket++库的可使用的所有事件总结 阅读84次,点赞0次
- C++ - 数组初始化 阅读255次,点赞0次
- C++11 - 使用std::thread在类内部以成员函数作为多线程函数执行异步操作 阅读2256次,点赞0次
- C++ - 字节数组byte[]或者unsigned char[]与double的相互转换 阅读2012次,点赞0次
- C++11/std::condition_variable - 生产者消费者模型 阅读2720次,点赞0次
- C++ - 将std::vector中的数值拷贝到数组中 阅读2139次,点赞1次
- C++11 - 构建一个符合实际应用要求的线程池 阅读1040次,点赞0次
- C++ – Unicode编码下的全角字符转半角字符 阅读1874次,点赞0次
- C++ - 将Unicode std::wstring字符串转换为Unicode std::string转义字符,类似于\uxxxx的形式 阅读1423次,点赞0次
- C++ - 智能指针的正确使用方式 阅读473次,点赞0次
全站随机文章推荐
- WordPress - get_sidebar函数,加载主题侧边栏模板 阅读815次,点赞0次
- 资源分享 - Artificial Intelligence for Games , First Edition 英文高清PDF下载 阅读919次,点赞0次
- 资源分享 - Game AI Pro 360 - Guide to Tactics and Strategy 英文高清PDF下载 阅读1704次,点赞0次
- OpenGL地球与太阳绕转代码 阅读2802次,点赞0次
- 资源分享 - Game Programming Gems 4 英文高清PDF下载 阅读2160次,点赞1次
- C++ - GBK编码下的全角字符转半角字符 阅读1488次,点赞0次
- OpenCV|FFmpeg - OpenCV cv::Mat与FFmpeg AVFrame的相互转换 阅读1218次,点赞0次
- 资源分享 - OpenGL 4.0 Shading Language Cookbook (Second Edition) 英文高清PDF下载 阅读1893次,点赞0次
- VTK读取一个TXT文档中的三维点坐标显示三维点云 阅读5969次,点赞4次
- Modern OpenGL - 与着色器Shader相关的API函数总结以及如何创建、编译与使用Shader 阅读599次,点赞0次
感谢大佬的解答,收获很多。
有一个疑问,在BytesToLongLong方法中为什么要进行 与0xFF操作呢?
比如((bytes[1] << 8) & 0xFF00),即使不&FF00,bytes[1]左移了8位后低8位依然是0。我感觉再与上FF00有点多此一举。