我需要创建一个Objective-C方法,将int转换为字节数组.在这个例子中,我不能使用NSArray作为返回类型,它必须是一个UInt8数组.我写了一个简单的方法来执行此操作,但它在编译期间有错误并告诉我,我有不兼容的返回类型.这是代码片段.有任何想法吗?
- (UInt8[])ConvertToBytes:(int) i
{
UInt8 *retVal[4];
retVal[0] = i >> 24;
retVal[1] = i >> 16;
retVal[2] = i >> 8;
retVal[3] = i >> 0;
return retVal;
}
Run Code Online (Sandbox Code Playgroud)
dre*_*lax 11
返回a中的值struct.您不能从C函数返回C样式数组,这也意味着您也无法从Objective-C方法返回它们.您可以返回结构,结构允许数组作为成员.
// in a header
typedef struct
{
UInt8 val[4];
} FourBytes;
// in source
- (FourBytes) convertToBytes:(int) i
{
FourBytes result = { i >> 24, i >> 16, i >> 8, i };
return result;
}
- (void) someMethod
{
FourBytes test = [someObject convertToBytes:0x12345678];
NSLog ("%d, %d, %d, %d", test.val[0], test.val[1], test.val[2], test.val[3]);
}
Run Code Online (Sandbox Code Playgroud)
您无法返回本地C数组.你需要malloc(sizeof(UInt8) * 4)填充它,返回指针,当然你不要忘记在完成后释放它.
下面是一个如何编写和使用它的例子(只是为了强调释放你分配的内存的重要性):
+ (UInt8 *)convertToBytes:(int)i {
UInt8 *retVal = malloc(sizeof(UInt8) * 4);
retVal[0] = i >> 24;
retVal[1] = i >> 16;
retVal[2] = i >> 8;
retVal[3] = i >> 0;
return retVal;
}
- (void)someMethodUsingTheOtherOne {
int something = 900;
UInt8 *bytesOfInt = [[self class] convertToBytes:something];
someFunctionUsingTheBytes(bytesOFInt);
free(bytesOfInt);
}
Run Code Online (Sandbox Code Playgroud)
(你可能会注意到我也把它改成了一个类方法.因为它不依赖于实例的任何属性,所以它更有意义的是它成为一个类方法甚至只是一个函数.但这并不是与数组和指针的工作方式有关 - 我只想在示例中使用良好的编码风格.)
| 归档时间: |
|
| 查看次数: |
8930 次 |
| 最近记录: |