【问题标题】:how to display ascii bytes in xcode/objective-c?如何在 xcode/objective-c 中显示 ascii 字节?
【发布时间】:2012-04-02 19:28:17
【问题描述】:

我正在查看 Apple 的 EADemo 项目,向用户展示如何使用外部附件框架。有人能告诉我如何显示或“计算”接收到的数据,而不仅仅是增加接收到的字节数吗? (我对 Objective-c、ios 和苹果的所有东西都是全新的!)

- (void)_sessionDataReceived:(NSNotification *)notification
{
    EADSessionController *sessionController = (EADSessionController *)[notification object];
    uint32_t bytesAvailable = 0;

    while ((bytesAvailable = [sessionController readBytesAvailable]) > 0) {
        NSData *data = [sessionController readData:bytesAvailable];
        if (data) {
            _totalBytesRead += bytesAvailable;
        }
    }

    [_receivedBytesLabel setText:[NSString stringWithFormat:@"Bytes Received from Session: %d", _totalBytesRead]];
}

我将如何更改最后一行以显示接收到的 ascii 数据而不是接收到的字节?

谢谢!

【问题讨论】:

    标签: objective-c ios5 xcode4


    【解决方案1】:

    只需从数据中创建一个NSString

    if (data) {
        _totalBytesRead += bytesAvailable;
        NSString *asciiStringFromData = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
        NSLog(@"ASCII bytes read: %@", asciiStringFromData);
    }
    

    如果您需要不同的编码,here's the list

    【讨论】:

    • 如果我希望应用程序显示字符而不是将其发送到 nslog,我将如何更改最后一行以显示 ascii 而不是收到的字节?
    • 我还收到一条警告“类方法:'+initWithData:encoding:'(返回类型默认为'id')”
    • 我的错误,请参阅不会出现该错误的版本的更新代码。显示从数据中读取的字符串而不是字节数不仅仅是更改最后一行的问题,因为可以在 while 循环中读取多个字符串。您需要使用NSStringstringByAppendingString: 方法累积所有这些字符串,然后使用该字符串而不是_totalBytesRead。并将%d 更改为%@
    【解决方案2】:

    您需要将 NSData 转换为 NSString Convert UTF-8 encoded NSData to NSString 然后你可以像这样打印出 NSString:

    NSLog(@"the data I got was %@", myString);
    

    这假定 myString 是您从 NSData 创建的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 2011-09-16
      • 2011-02-10
      相关资源
      最近更新 更多