确定 UTF-8 编码的 NSData 是否包含以 null 结尾的字符串

2023-12-22

我有 NSData 到 NSString 的转换NSData类别,因为我总是使用NSString方法:initWithData:encoding:。但是,根据这个答案,https://stackoverflow.com/a/2467856/1231948 https://stackoverflow.com/a/2467856/1231948,事情没那么简单。

到目前为止,我的方法里有这个方法NSData类别,努力与其他数据对象中从同名方法返回字符串的方法保持一致:

- (NSString *) stringValue
{
    return [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
}

到目前为止它是成功的,但我想确定一个字符串是否以空结尾,以决定是否应该使用此方法,也来自答案链接:

NSString* str = [NSString stringWithUTF8String:[data bytes]];

如何判断是否是UTF-8编码NSData包含空终止字符串?


得到下面的答案后,我为我的代码编写了更彻底的实现NSData分类法,stringValue:

- (NSString *) stringValue
{
    //Determine if string is null-terminated
    char lastByte;
    [self getBytes:&lastByte range:NSMakeRange([self length]-1, 1)];

    NSString *str;

    if (lastByte == 0x0) {
        //string is null-terminated
        str = [NSString stringWithUTF8String:[self bytes]];
    } else {
        //string is not null-terminated
        str = [[NSString alloc] initWithData:self encoding:NSUTF8StringEncoding];
    }

    return str;
}

空终止字面意思是最后一个字节的值为零。很容易检查:

char lastByte;
[myNSData getBytes:&lastByte range:NSMakeRange([myNSData length]-1, 1)];
if (lastByte == 0x0) {
    // string is null terminated
} else {
    // string is not null terminated
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定 UTF-8 编码的 NSData 是否包含以 null 结尾的字符串 的相关文章

随机推荐