【问题标题】:Read integer from file IOS从文件 IOS 中读取整数
【发布时间】:2013-06-22 23:04:16
【问题描述】:

我有一个文件,它在数据的第一个字节中包含一个数字。在这种情况下,这个数字是 32。我使用十六进制编辑器来确认(十六进制)该值是“20”,它等于十进制的 32。

有人可以指出如何从文件中读取它的正确方向吗?我尝试了大约 6 种不同的方法,但都失败了。

【问题讨论】:

  • 你能总结一下你尝试了什么以及它们是如何失败的吗?
  • 同意。当它可能是一个简单的错误时,重复努力是没有意义的。
  • 不,不是。我需要一页又一页地总结我所做的一切。我在应该很简单的问题上投入了太多精力。

标签: ios objective-c file-io binary hex


【解决方案1】:

很多不同的方式。这是一个:

NSData *data = [NSData dataWithContentsOfFile:filename];
if ([data length] > 0)
{
    const uint8_t *bytes = (const uint8_t *)[data bytes];
    uint8_t byte = bytes[0];
    NSLog(@"%d", byte);
}

或其他:

NSInputStream *stream = [NSInputStream inputStreamWithFileAtPath:filename];
[stream open];
NSInteger bufferLen = 1;
uint8_t buffer[bufferLen];
NSInteger count = [stream read:buffer maxLength:bufferLen];
[stream close];
if (count > 0)
{
    NSLog(@"%d", buffer[0]);
}

【讨论】:

  • 我尝试了这两种方法,顶部的导致编译器错误,底部的返回 1 而不是 32...
  • @Hoodai 这两个都是从一个工作测试项目中剪切和粘贴的,对我来说都很好,我从两者都得到了“32”(对于第一个字节为 0x20 的文件)。关于编译错误,如果你不告诉我错误是什么以及你在哪一行得到错误,我无法帮助你。在第二个示例中,我只能说您通过您的应用程序打开的文件听起来不像包含您认为的内容。 count 大于零似乎令人难以置信,但这并没有返回第一个字节。如果您将文件上传到某个地方,我很乐意查看。
  • @Hoodai 嗯,我将它添加到我的项目中并且效果很好(从两个代码 sn-ps 中获取“32”)。如果它不适合您,我会尝试清理项目(或者更好的是,删除应用程序并重新安装)并重建它。如果您在 Xcode IDE 之外编辑/更改文件,有时 Xcode 会感到困惑。上述模式并不少见,这是一个微不足道的编程问题,你的问题一定很奇怪,就像一个需要从头开始重建的混乱项目。祝你好运。
  • 我不知道我最初做错了什么,但我又试了一次,都成功了。但是,我的目的最好的第一台服务器。非常感谢您的帮助!
  • @Hoodai 我敢肯定这只是 Xcode 弄糊涂了。在处理外部文件时,我自己偶尔也会遇到这个问题,而“清理”(或更糟糕的是,删除应用程序并重新安装)通常会修复它。很高兴你又开始营业了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
相关资源
最近更新 更多