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

时间:2014-07-06 15:46:42

标签: c pointers

我有一个名为long long int的<{1}}类型的变量;

iData从1到最大值计数。

我需要将此变量复制到char数组。

我尝试了以下方法

iData

但是我希望将它存储在指针变量long long int iData; char cDataBuffer[8]; for(i=0;i<8;i++) { cDataBuffer[i]= (iData & 0XFF); iData = (iData >>8); } 中的动态变量中。

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

2 个答案:

答案 0 :(得分:2)

以下逻辑将帮助您

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);
}

答案 1 :(得分:1)

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

char* pDataBuffer = (char*)&iData;

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

另请注意,pDataBuffer[i]将在不同的 Endian 架构上进行不同的解释。


如果您需要目的的副本,那么您可以按如下方式使用函数memcpy

char* pDataBuffer = malloc(sizeof(iData));
memcpy(pDataBuffer,&iData,sizeof(iData);
return pDataBuffer;

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

例如:

void SomeFunction()
{
    ...
    char aDataBuffer[sizeof(iData)];
    SomeOtherFunction(aDataBuffer);
    ...
}

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

否则,您需要在执行程序的某个稍后时间free分配内存。

同样,请记住,pDataBuffer[i]将在不同的 Endian 架构上进行不同的解释。