【问题标题】:Remove data from beginning of NSData object从 NSData 对象的开头删除数据
【发布时间】:2016-02-10 13:47:36
【问题描述】:

我正在组装一个 NSData 对象,我得到以下内容

0100020000

这是我想要的,除了前导零。我需要它是

100020000

我尝试了以下代码。但它给我留下了 00020000。

NSRange range = NSMakeRange(0, 1);
[byteRequest replaceBytesInRange:range withBytes:NULL length:0];

有什么想法吗?谢谢。

【问题讨论】:

  • 很难从您的问题中看出数据实际上是什么样的。那些是十六进制字节的字符串吗?文本?如果它是十六进制字节,那么每个 pair 数字代表一个字节,这意味着你试图从前面删除半个字节——如果没有很多额外的内容,这是行不通的有点玩弄。但这将是一个非常不寻常的要求,所以我猜你实际上是在追求不同的东西。您能否详细说明数据代表什么以及您需要什么?
  • 它是一个十六进制字节的字符串。我想出了一个更好的方法来做到这一点。我正在将每一块转换为 NSData 并附加它。如果我将整个字符串转换为 NSData ,它将解决我的问题。最后的附加零就可以了。谢谢。

标签: ios nsdata nsrange


【解决方案1】:

根据您的描述,您有以下 5 个字节:

1, 0, 2, 0, 0

您以某种方式将其转换为十六进制,每个字节创建两位数:

“01 00 02 00 00”

但这只是先前字节的文本表示。它相当于所有这些:

“0100020000”

“0x0100020000”

“4,295,098,368”(十进制) “040000400000”(八进制)

你似乎想要的那个:“100020000”

就像“1.00”等价于“1.0”一样,“01”等价于“1”。

如果您的目标是将所有字节的字符串作为两位数字符串,除了第一个,它应该只包含所需的位数,那么这里是一个示例:

 int bytes[5] = {1, 0, 2, 0, 0};
 NSString *str = [NSString stringWithFormat:@"%x%02x%02x%02x%02x", bytes[0], bytes[1], bytes[2], bytes[3], bytes[4]];

如果字节数未知,您可以使用循环并附加这些。以%x 开头,然后使用%02x 进行所有后续操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-11
    • 2018-03-07
    • 2020-05-03
    • 1970-01-01
    • 2020-12-27
    • 2012-02-29
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多