将Java方法转换为Objective-C [关闭]

问题描述 投票:-2回答:2

我正在尝试将以下函数转换为Objective-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;
}

我的退货单上收到两个警告:

  1. 与本地变量“关联的堆栈存储器地址返回”
  2. 不兼容的指针类型从结果类型为char *的函数返回char [4] *
java objective-c converters
2个回答
1
投票

与本地变量“关联的堆栈存储器地址返回”

您不能将指针返回到函数的局部变量,因为该指针函数返回后将立即无效。解决方案是为字节数组allocate内存并返回该内存。

不兼容的指针类型从具有以下功能的函数返回char [4] *结果类型char *

char *l_byte_array[4]char的4个pointers的数组,而不是4个char的数组。

有效的解决方案是>

-(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()内存:

char *byte_array = [self convertByteArray:some_int];
// … do something with the byte array ...
free(byte_array);

另请注意,右移负数

与实现有关,因此您可以考虑改用unsigned int参数。

2
投票

我相信问题出在相应版本中的这两行。

© www.soinside.com 2019 - 2024. All rights reserved.