首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++整数到字节数组

C++整数到字节数组
EN

Stack Overflow用户
提问于 2011-04-08 02:05:46
回答 8查看 136.6K关注 0票数 36

我在我的java代码中有这个方法,它返回给定int的字节数组:

代码语言:javascript
复制
private static byte[] intToBytes(int paramInt)
{
     byte[] arrayOfByte = new byte[4];
     ByteBuffer localByteBuffer = ByteBuffer.allocate(4);
     localByteBuffer.putInt(paramInt);
     for (int i = 0; i < 4; i++)
         arrayOfByte[(3 - i)] = localByteBuffer.array()[i];
     return arrayOfByte;
}

有人能给我一些提示吗?我怎样才能把这个方法转换成C++?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-04-08 02:20:23

使用std::vector<unsigned char>

代码语言:javascript
复制
#include <vector>
using namespace std;

vector<unsigned char> intToBytes(int paramInt)
{
     vector<unsigned char> arrayOfByte(4);
     for (int i = 0; i < 4; i++)
         arrayOfByte[3 - i] = (paramInt >> (i * 8));
     return arrayOfByte;
}
票数 30
EN

Stack Overflow用户

发布于 2011-04-08 02:07:32

你不需要一个完整的函数;一个简单的类型转换就足够了:

代码语言:javascript
复制
int x;
static_cast<char*>(static_cast<void*>(&x));

C++中的任何对象都可以重新解释为字节数组。如果您希望将字节实际复制到单独的数组中,则可以使用std::copy

代码语言:javascript
复制
int x;
char bytes[sizeof x];
std::copy(static_cast<const char*>(static_cast<const void*>(&x)),
          static_cast<const char*>(static_cast<const void*>(&x)) + sizeof x,
          bytes);

这两种方法都没有考虑字节顺序,但是由于您可以将int重新解释为字节数组,因此自己执行任何必要的修改都很容易。

票数 72
EN

Stack Overflow用户

发布于 2011-04-08 02:09:13

您可以通过and和移位操作获得单个字节:

代码语言:javascript
复制
byte1 =  nint & 0x000000ff
byte2 = (nint & 0x0000ff00) >> 8
byte3 = (nint & 0x00ff0000) >> 16
byte4 = (nint & 0xff000000) >> 24
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5585532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档