在char *中存储整数

时间:2014-08-14 08:47:41

标签: c++ c apache-zookeeper

我是初学者,是在尝试一些事情。如何将整数数组传递给期望c / c ++中的char *的函数,因为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

我不知道我做错了什么。

P.S。我需要这个,因为我正在使用apache Zookeeper和set和get函数,它需要char *类型的参数作为你的数据。

5 个答案:

答案 0 :(得分:2)

与使用例如数组或指针时相同的方法send用于套接字:你投射指针。

int data[DATA_SIZE];

...

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

这很常见,因为许多函数都会将指针指向char,即使对于通用数据也是如此。最重要的问题是的功能

答案 1 :(得分:2)

C和C ++是不同的语言。

“整数数组”不是C类型。请具体,如:

int my_array[42];

你没有在C中传递数组。除非它是 sizeof ,一元&amp; _Alignof 运算符的操作数,或者用作初始化程序,具有数组类型的表达式求值为指向数组第一个元素的指针的值。请参阅http://www.iso-9899.info/wiki/Code_snippets

上的“阵列衰减”

在C中,您始终可以将指向任何完整或不完整对象类型的指针强制转换为指向 char * 的指针。 int * 是指向完整对象类型的指针。知道了这些事实,以下代码在函数体内是有效的:

int my_array[42];
char * what_i_want;

what_i_want = (char *) my_array;

然后你可以将'what_i_want'值传递给任何接受 char * 参数的函数。

说完这些之后,你需要了解这个函数的期望。分享功能和一些实际代码,然后也许某人将能够提供更多关于如何实现目标的见解。

答案 2 :(得分:0)

char *也可用于指向字符串,因此您可以尝试使用适当的转换(int - &gt; string,string - &gt; int)函数来传递这些。

如果您发布代码,我可以尝试提供更详细的答案。

答案 3 :(得分:0)

Char * - 它是唯一的指针类型,但你可以提供你想要的所有功能。 你可以这样做:

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

当然,这是非常野蛮的方式,所以在这种情况下你应该非常小心,做一些检查等等。

答案 4 :(得分:0)

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

int x[5] = {1,2,3,4,5};
func((char*)x);