Динамически копировать значение long long int в массив char
У меня есть переменная, которая имеет тип long long int
названный iData
;
iData
отсчитывает от 1 до максимального значения.
Мне нужно скопировать эту переменную в массив символов.
Я попробовал этот метод ниже
long long int iData;
char cDataBuffer[8];
for(i=0;i<8;i++) {
cDataBuffer[i]= (iData & 0XFF);
iData = (iData >>8);
}
Но я хочу сохранить это в динамической переменной в переменной указателя char *pDataBuffer
,
Может кто-нибудь подсказать, как хранить эту переменную длину переменной iData.
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);
}
Если вы не планируете изменять эту копию где-либо (то есть, если вы используете ее только для чтения), то вот простое решение для вас с временной сложностью 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.