2012-08-26 240 views
1

如何將short int []轉換爲char *?將short int []轉換爲char *

short int test[4000]; 
char* test2; 

我嘗試這樣做:

test2 = (char*)test[4000] 

錯誤 - > PTR無效

+2

你想*轉換類型*或*轉換值*?換句話說,'test2'應該包含什麼,你想用它做什麼? –

+0

大概你*是*試圖訪問原始的二進制數據,而不是試圖輸出一個字符串? –

+0

測試是一個緩衝區,我會把它寫在文件上,但是fprint需要一個char *。有更好的解決方案嗎? – user1611777

回答

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,則必須重新編寫剩餘部分。

2

你在做什麼可能是一個壞主意,但是......

test2 = (char*) test; 
4

喜歡這個:

test2 = (char*)test; 

test[4000]意味着4001 st項目的數組test,而不是陣列本身。

一般來說,這不是一個好主意。至少,你的程序在大端系統和小端系統之間是不可移植的。儘管如此,如果你正在編寫一個特定的微控制器,沒關係。