我有一个名为iData的long long int类型的变量;
iData从1开始计数到其最大值。
我需要将这个变量复制到char数组中。
我尝试了下面的方法
long long int iData;
char cDataBuffer[8];
for(i=0;i<8;i++) {
cDataBuffer[i]= (iData & 0XFF);
iData = (iData >>8);
}但是我想把它存储在指针变量char *pDataBuffer的动态变量中。
有没有人可以建议如何存储这个可变的iData变量长度。
发布于 2014-07-06 23:59:30
下面的逻辑将会帮助你
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);
}发布于 2014-07-07 00:59:07
如果您不打算在任何地方更改该副本(即,如果您将其用于只读目的),那么这里有一个简单的解决方案,其时间复杂度为O(0):
char* pDataBuffer = (char*)&iData;当然,如果iData是一个局部变量,那么您不能在函数外部使用此指针的值。
另外,请注意,pDataBuffer[i]在不同的Endian架构上会有不同的解释。
如果您需要它的副本用于write目的,那么您可以简单地使用函数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]在不同的字节顺序体系结构上会有不同的解释。
https://stackoverflow.com/questions/24597582
复制相似问题