首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将long long int的值动态复制到char数组

将long long int的值动态复制到char数组
EN

Stack Overflow用户
提问于 2014-07-06 23:46:42
回答 2查看 3.2K关注 0票数 0

我有一个名为iDatalong long int类型的变量;

iData从1开始计数到其最大值。

我需要将这个变量复制到char数组中。

我尝试了下面的方法

代码语言:javascript
复制
long long int iData;
char cDataBuffer[8];

for(i=0;i<8;i++) {
  cDataBuffer[i]= (iData & 0XFF);
  iData = (iData >>8);
}

但是我想把它存储在指针变量char *pDataBuffer的动态变量中。

有没有人可以建议如何存储这个可变的iData变量长度。

EN

回答 2

Stack Overflow用户

发布于 2014-07-06 23:59:30

下面的逻辑将会帮助你

代码语言:javascript
复制
long long int iData;
char *cDataBuffer;

cDataBuffer = malloc(sizeof(char) * sizeof(iData));

for (i = 0; i < sizeof(iData); i++) 
{
  cDataBuffer[i] = ((iData >> (i * 8)) & 0XFF);
}
票数 2
EN

Stack Overflow用户

发布于 2014-07-07 00:59:07

如果您不打算在任何地方更改该副本(即,如果您将其用于只读目的),那么这里有一个简单的解决方案,其时间复杂度为O(0):

代码语言:javascript
复制
char* pDataBuffer = (char*)&iData;

当然,如果iData是一个局部变量,那么您不能在函数外部使用此指针的值。

另外,请注意,pDataBuffer[i]在不同的Endian架构上会有不同的解释。

如果您需要它的副本用于write目的,那么您可以简单地使用函数memcpy,如下所示:

代码语言:javascript
复制
char* pDataBuffer = malloc(sizeof(iData));
memcpy(pDataBuffer,&iData,sizeof(iData);
return pDataBuffer;

如果可能的话,我强烈建议你在函数外部静态地分配它,并根据需要传递。

例如:

代码语言:javascript
复制
void SomeFunction()
{
    ...
    char aDataBuffer[sizeof(iData)];
    SomeOtherFunction(aDataBuffer);
    ...
}

void SomeOtherFunction(char* pDataBuffer)
{
    ...
    memcpy(pDataBuffer,&iData,sizeof(iData);
    ...
}

否则,您将需要在稍后的程序执行过程中对分配的内存执行free

同样,请记住,pDataBuffer[i]在不同的字节顺序体系结构上会有不同的解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24597582

复制
相关文章

相似问题

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