2014-02-25 65 views
-2

我想下面的函數轉換成目標C:將Java方法目標C

private static byte[] convertByteArray(int p_int) { 
     byte[] l_byte_array = new byte[4]; 
     int MASK_c = 0xFF; 
     for (short i = 0; i <= 3; i++) { 
       l_byte_array[i] = (byte) ((p_int >> (8 * i)) & MASK_c); 
     } 
     return l_byte_array; 
    } 

我已經嘗試過:

-(char *)convertByteArray:(int)p_int 
{ 
    const char *l_byte_array[4]; 
    int MASK_c = 0xFF; 
    for (short i = 0; i <= 3; i++) { 
     l_byte_array[i] = (char *) ((p_int >> (8 * i)) & MASK_c); 
    } 
    return l_byte_array; 
} 

但那不是正確的我猜...

更新:

如果我嘗試沒有const:

-(char *)convertByteArray:(int)p_int 
{ 
    char *l_byte_array[4]; 
    int MASK_c = 0xFF; 
    for (short i = 0; i <= 3; i++) { 
     l_byte_array[i] = (char *) ((p_int >> (8 * i)) & MASK_c); 
    } 
    return l_byte_array; 
} 

我得到兩次警告我回到聲明:

與局部變量相關的'返回
  • 不兼容的指針類型返回的char [4] *從函數結果類型堆棧內存
    1. 地址char *
  • +4

    我建議加上你認爲它不正確的原因,比如錯誤或比較輸出。 – Seidr

    +0

    更新了我的答案...... – davidOhara

    回答

    1

    地址返回

    不能返回一個指向你的函數的局部變量,因爲指針 將是無效的,因爲一旦功能回報。 解決的辦法是爲分配內存的字節數組並返回。

    不相容指針類型返回的char [4] *從與 結果類型char *

    char *l_byte_array[4]一個功能是4個指針的數組char,不是4 char陣列。

    A工作液是

    -(char *)convertByteArray:(int)p_int 
    { 
        char *l_byte_array = malloc(4); 
        int MASK_c = 0xFF; 
        for (short i = 0; i <= 3; i++) { 
         l_byte_array[i] = (char) ((p_int >> (8 * i)) & MASK_c); 
        } 
        return l_byte_array; 
    } 
    

    注意,該方法的調用者具有free()存儲器時不再需要它:

    還注意,右移一個負編號取決於實現,因此您可能會考慮使用unsigned int參數。

    +0

    但在哪裏釋放內存?退貨聲明後?原因char * l_byte_array不是全局的... – davidOhara

    +0

    @chrizstone:*調用函數*必須釋放內存。我用一個例子更新了答案。 –

    +0

    Ahh ok ... Thx太多了...... – davidOhara

    2

    我相信問題是在相應版本中的這兩行。

    的Java:

    byte[] l_byte_array = new byte[4]; 
    

    Objective-C的

    const char *l_byte_array[4]; 
    

    我相信const意味着它宣佈之後,這意味着你的for循環將不會按預期工作,你無法編輯對象。刪除const,看看會發生什麼。

    關於你的錯誤:

    1. address of stack memory associated with local variable '' returned 
    2. incompatible pointer types returning char[4] * from a function with result type char * 
    
    1. 你的變量是本地的,所以當方法結束的變量會從堆棧中解脫出來。也許設置一個全局變量,所以你不會丟失數據,或者不傳遞指針。
    2. 顯然你用來捕獲返回的變量沒有被正確聲明。希望修復問題#1也會解決這個問題。確保聲明是相同的,或者您至少可以將對象轉換爲適當的類型。與局部變量相關的'堆棧內存
    +0

    'const'由編譯器檢查。要麼編譯或不編譯,但你不會得到「意想不到的結果」。 –

    +0

    更新了我的答案... – davidOhara

    +0

    更新了我的也。 – dckuehn