Хранение целых чисел в char *

Я новичок, могу попробовать что-то. Как я могу передать массив целых чисел в функцию, ожидающую char * в c / c ++, так как диапазон char только от -128 до 127, но я хочу хранить числа из целого диапазона целых чисел.

Вот что я пытался:

#include<stdlib.h>
#include<stdio.h>

int size = 12;

void print(char* array){

int i,j;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
printf("%d ",*(array+i*size+j));

printf("\n");
}

int main(){

int array[size][size];
int i=0,j=0,k=0;

for(i=0;i<size;i++)
for(j=0;j<size;j++)
array[i][j]=k++;

for(i=0;i<size;i++)
for(j=0;j<size;j++)
printf("%d ",array[i][j]);

printf("\n");

print((char *) array);

return 0;
}

Когда массив печатается внутри основной функции, вывод выводится правильно (числа 0-143), но внутри функции print () вывод

0 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 5 0 0 0 6 0 0 0 7 0 0 0 8 0 0
0 9 0 0 0 10 0 0 0 11 0 0 0 12 0 0 0 13 0 0 0 14 0 0 0 15 0 0 0 16 0 0
0 17 0 0 0 18 0 0 0 19 0 0 0 20 0 0 0 21 0 0 0 22 0 0 0 23 0 0 0 24 0
0 0 25 0 0 0 26 0 0 0 27 0 0 0 28 0 0 0 29 0 0 0 30 0 0 0 31 0 0 0 32
0 0 0 33 0 0 0 34 0 0 0 35 0 0 0

Я не знаю, что я делаю не так.

Постскриптум Мне это нужно, так как я использую apache Zookeeper и функции set и get, для которых требуются аргументы типа char * для ваших данных.

0

Решение

Таким же образом вы можете использовать любой массив или указатель при использовании, например. send для розеток: вы бросать указатель

подобно

int data[DATA_SIZE];

...

send(s, (const char *) data, sizeof(data), 0);

Это очень часто, так как многие функции принимают указатель на char даже для общих данных. Большой вопрос в том, что функция делает с данными.

2

Другие решения

C и C ++ — это разные языки.

«Целочисленный массив» не является типом C. Пожалуйста, будьте конкретны, такие как:

int my_array[42];

Вы не передаете массивы в C. Если это не операнд размер, унарный & или же _Alignof операторы или используется в качестве инициализатора, выражение с типом массива оценивается как значение указателя на первый элемент массива. Пожалуйста, смотрите «Array Decay» в http://www.iso-9899.info/wiki/Code_snippets

В C вы всегда можете привести указатель на любой полный или неполный тип объекта к указателю на символ *. int * указатель на полный тип объекта Зная эти факты, следующий код действителен внутри тела функции:

int my_array[42];
char * what_i_want;

what_i_want = (char *) my_array;

Затем вы можете передать значение what_i_want любой функции, принимающей символ * аргумент.

Сказав это, вы должны понять, что ожидает функция. Поделитесь этой функцией и некоторым реальным кодом, тогда, возможно, кто-то сможет предложить более глубокое понимание того, как достичь вашей цели.

2

char * также может использоваться для указания на строку, поэтому вы можете попробовать использовать соответствующие функции преобразования (int -> string, string -> int) для их передачи.

Если вы отправите код, я могу попытаться дать более подробный ответ.

0

Char * — это единственный тип указателя, но вы можете предоставить эту функцию все, что захотите.
Вы можете сделать что-то подобное:

void func(char* aPointer)
{
int* arr = (int*)aPointer;
int firstInt = *arr;
...
}

Конечно, это очень жестокий путь, поэтому в этом случае вы должны быть очень осторожны, сделать некоторые проверки и так далее.

0
void func(char* c)
{
...
}

int x[5] = {1,2,3,4,5};
func((char*)x);
0
По вопросам рекламы [email protected]