从C / C ++类型转换为Objc类型

时间:2015-08-09 01:11:49

标签: objective-c casting bridge

我目前正在开发一个需要一些objc绑定的项目。虽然我不是iOs的专家,但直到现在我的表现都相当不错。

我需要将一些C ++类型转换为Objc类型:

std::streamsize read(uint32_t *buffer) {
    return _read(buffer, sizeof(uint32_t));
}

std::streamsize read(double *buffer) {
    return _read(buffer, sizeof(double));
}

std::streamsize read(std::string *buffer) {
    return _read(buffer, sizeof(std::string));
}

template<typename T>
std::streamsize _read(T *buffer, std::streamsize length) {
     NSString* buff = (__bridge NSString *)buffer;
    return [_memoryAdapter read:buff withLength:length];
}

我收到了这些错误:

Incompatible types casting 'unsigned int *' to 'NSString *' with a __bridge cast.
Incompatible types casting 'double *' to 'NSString *' with a __bridge cast.

看起来我的演员阵容几乎都失败了,除了std :: string one。

我使用__bridge错了吗?经过一些研究,我确实发现它用于将C和C ++类型转换为Objc。任何人都可以给我一个答案,暗示或/和我的错误的解释?我也查看了堆栈溢出到任何可能的重复或进一步的建议,但找不到任何东西。

提前致谢

编辑:我需要读入缓冲区并将读取的字节存储到指针中,这就是我试图将其转换为NSMutableString的原因。

- (NSInteger) read:(NSMutableString *)buffer withLength:(NSInteger)length {
const char* fileBytes = (const char*)[self._buffer bytes];
NSUInteger index;

for (index = 0; index< [self._buffer length]; index++)
{
    if (index >= self._cursor) {
        NSString *aByte  = [NSString stringWithFormat:@"%c", fileBytes[index]];
        [buffer appendString:aByte];
    }
    if (index >= self._cursor + length)
        break;
}
self._cursor += length;
return length;

}

1 个答案:

答案 0 :(得分:0)

使用NSNumber类集群,使您可以轻松地执行指向任何类型的整数转换的指针:

[[NSNumber numberWithUnsignedInt:buffer] integerValue]

enter image description here

const char *index_pointer = [[NSString stringWithFormat:@"%lu", index]] cStringUsingEncoding:NSUTF8StringEncoding];