我正在尝试将以下函数转换为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;
}
我的退货单上收到两个警告:
与本地变量“关联的堆栈存储器地址返回”
您不能将指针返回到函数的局部变量,因为该指针函数返回后将立即无效。解决方案是为字节数组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
参数。我相信问题出在相应版本中的这两行。