Динамически копировать значение 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.

Другие вопросы по тегам