【问题标题】:Why doesn't strlen() return the correct number of bytes here?为什么 strlen() 不在这里返回正确的字节数?
【发布时间】:2016-10-24 12:52:40
【问题描述】:
NSString* data = @"UdmAjkmNQs79+J/a/MVVSACRkIo=";
NSData *key = [NSData dataFromBase64String:data];
const char *keyBytes = [key bytes];
NSLog(@"Length:  %lu", strlen(keyBytes));

考虑上面的代码。我有一个包含 20 个字节数据的 base64 字符串。我把它变成字节,我喜欢检查字节数。这会打印 16。为什么会打印 16,我需要做什么才能获得正确的字节数 (20)?

【问题讨论】:

    标签: objective-c base64 byte


    【解决方案1】:

    使用以下代码获取数据字节长度:

    NSString* data = @"UdmAjkmNQs79+J/a/MVVSACRkIo=";
    NSData *key = [[NSData alloc] initWithBase64EncodedString:data options:NSDataBase64DecodingIgnoreUnknownCharacters];
    NSLog(@"Length:  %lu", [key length]);
    

    【讨论】:

    • 谢谢。还找出了它并不总是与 strlen() 一起使用但偶尔会起作用的原因。我的十六进制示例字符串是 51D9808E498D42CEFDF89FDAFCC555480091908A。并且末尾附近的 00 是一个空终止符,因此它只看到 strlen() 的前 16 个字节(或实际上是字符)
    • 是的,它在某些情况下会起作用,因此请小心使用 strlen() 与字节或面糊我建议使用 NSDatalength 函数以获得最佳效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多