2017-03-08 24 views
1

如何在調用send_data函數時在以下代碼中正確轉換SEPARATOR?鑄造單個字符,以便在需要char *時使用

foo.h中

#define SEPARATOR 0xFF 

void send_data(unsigned char * data, int dataSize); 

foo.c的

void welcome(){ 
    // I want to call it in a one line 
    send_data(SEPARATOR ,1); 
} 

順便說一句,我當然可以定義分離器一個const char。但我只是想知道是否有任何方式使用它。

+0

是否要將地址設置爲0xFF到send_data或值爲0xFF。在上面的代碼中,您將地址設置爲0xFF,在這種情況下,該地址應該有一些有意義的數據。 –

+0

「投射」表示使用相同的數據,就好像它是不同的類型。你想得到一個指向某個值的指針 - 它不叫做「cast」。 – aragaer

回答

3

老派的辦法是解決它,如果你不想改變它:

void welcome(void) 
{ 
    unsigned char data = SEPARATOR; 
    send_data(&data, 1); 
} 

但你也應該能夠使用C99複合文字:

send_data((unsigned char[1]) { SEPARATOR }, 1); 
+0

send_data((unsigned char [1]){SEPARATOR},1); >>醜,但我要求的。謝謝!! –

2

複合文字(C99或更高版本)可能會有用。

void welcome(){ 
    // I want to call it in a one line 
    send_data((unsigned char[]){SEPARATOR} ,1); 
} 

如果需要,添加終止空字符。

void welcome(){ 
    // I want to call it in a one line 
    send_data((unsigned char[]){SEPARATOR, 0} ,1); 
} 
+0

'send_data()'的第二個參數是長度,所以0終止(不變長度爲1)是沒有意義的。 – unwind

+0

感謝您的終止提示! –

+0

@unwind函數如何處理字符串或原始數據並不明顯。沒有澄清函數的作用,這段代碼比你的版本更安全。假設例如該函數將這兩個參數傳遞給'strncpy'或類似的。 – Lundin