我正在尝试将以下函数转换为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;
}
我的退货声明收到两条警告:
答案 0 :(得分:2)
我认为问题在于相应版本中的这两行。
爪哇:
byte[] l_byte_array = new byte[4];
目标-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 :(得分:1)
与本地变量“'返回
相关联的堆栈内存的地址
您不能返回指向函数局部变量的指针,因为指针 函数返回后将立即失效。 解决方案是为字节数组分配内存并返回该内存。
不兼容的指针类型从函数返回char [4] * 结果类型char *
char *l_byte_array[4]
是一个包含4个指针到char
的数组,而不是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
参数。