在char*中存储整数

Storing integers in char*

本文关键字:存储 整数 char      更新时间:2023-10-16

我是一个初学者,正在尝试一些东西。我如何将整数数组传递给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;
}

在main函数中打印数组时,输出是正确的(数字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 6 0 0 0 7 0 0 8 0 0 00 0 0 0 0 10 0 0 0 0 11 0 0 0 13 0 0 0 14 0 0 0 15 0 0 0 16 0 0 00 17 0 0 18 0 0 19 0 0 20 0 0 21 0 0 22 0 0 23 0 0 0 24 00 0 25 0 0 26 0 0 0 27 0 0 28 0 0 29 0 0 0 30 0 0 0 31 0 0 0 320 0 0 33 0 0 0 34 0 0 0 35 0 0 0

我不知道我做错了什么。

注:我需要这个,因为我正在使用apache Zookeeper和set和get函数,它需要char*类型的参数为您的数据。

同样的方式,你可以使用任何数组或指针,例如send用于套接字:你转换指针。

int data[DATA_SIZE];
...
send(s, (const char *) data, sizeof(data), 0);

这是非常常见的,因为许多函数即使对于通用数据也需要指向char的指针。最大的问题是函数对数据做了什么

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

"Integer array"不是C类型。请具体,例如:

int my_array[42];
在c语言中,不传递数组,除非它是sizeof、一元&_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 *参数的函数。

说了这些,你需要理解这个函数期望什么。分享函数和一些实际代码,然后也许有人能够提供更深入的见解,如何实现您的目标。

char *也可以用来指向一个字符串,所以你可以尝试使用适当的转换(int -> string, string -> int)函数来传递这些。

如果你的邮政编码,我可以试着提供一个更详细的答案。

Char* -这是唯一的指针类型,但是您可以为这个函数提供任何您想要的东西。你可以这样做:

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

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

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