1

如何将 short int[] 转换为 char*?

short int test[4000];
char* test2;

我试过这个:

test2 = (char*)test[4000]

错误--> PTR 无效

4

3 回答 3

4

像这样:

test2 = (char*)test;

test[4000]表示数组的第4001项test,而不是数组本身。

但总的来说,这不是一个好主意。至少,您的程序不能在大端和小端系统之间移植。不过,例如,如果您正在为特定的微控制器进行编码,那没关系。

于 2012-08-26T21:57:07.017 回答
2

您正在做的事情可能是个坏主意,但是...

test2 = (char*) test;
于 2012-08-26T21:57:05.787 回答
0

所以你有一个数组形式的缓冲区,你想把它的二进制内容写入一个文件。你这样做:

if (fwrite(test, sizeof(test), 1, f) < 1)
{
    // handle error here (write failed)
}

fwrite()函数用于将二进制数据写入文件(和fread()读取)。它需要一个void*指针,因此它可以与任何类型一起使用(并且 C++ 隐式地将任何其他指针/数组转换为它)。

sizeof(test)确定数组的确切大小。如果您不想写出全部内容(即仅填充部分内容),则可以使用sizeof(short) * N,其中N是填充元素的数量。

1这里的意思是有一个数据块要写入;所以fwrite()将一次写入整个数据。f是您正在写入的文件。它返回写入的块数(1成功和0失败)。


为了完整起见,我应该注意这只是使用fwrite(). 使用类似的东西可能更具语义:

fwrite(test, sizeof(short), N, f)

但是fwrite()实际上可能只写入部分数据,您需要关心这一点。换句话说,如果它返回小于N,您将不得不重试写入剩余部分。

于 2012-08-26T22:23:13.443 回答