我有一个名为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变量长度。
答案 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 架构上进行不同的解释。