【问题标题】:Remove first bytes of a unsigned char*删除 unsigned char* 的第一个字节
【发布时间】:2015-04-09 12:46:32
【问题描述】:

我目前正在做一个项目,我需要在其中使用 unsigned char* 和不需要的字节。我将描述情况:

1/ 我有一个加载图像 (UIImage) 的 iOS 应用。

2/ 我将此 UIImage 转换为 unsigned char*(感谢 PaulSoft here 提供的 ImageHelper

3/ 我将这个 unsigned char* 发送到一个图书馆,该图书馆在图像上发挥他的魔力。

4/ 库向我发回一个 unsigned char*,在数组的开头带有补充信息。

我在这里。我想删除这个数组的 13 个第一个字节,但我不知道该怎么做。 我尝试将其转换为 NSString*,将其裁剪并取回。与 NSData* 相同。 我绝对不是 Objective-C 的专家,所以我对你可能拥有的每一个想法持开放态度。如果我不够清楚,请随时问我。

最好的问候;

克里斯。

【问题讨论】:

  • 这与 Objective-C 无关——这是一个基本的 C 编程问题。在处理 Objective-C 之前学习 C。 (答案是newBufferPointer = oldBufferPointer + 13;
  • 最简单的方法是将除前 13 个字节之外的所有内容复制到一个新数组中(或忽略它们)。

标签: ios objective-c uiimage bytearray unsigned-char


【解决方案1】:

正如@HotLicks 在他的评论中所说,最简单的做法是简单地创建一个新的 char 指针,将 13 个字节指向缓冲区:

char* newPointer = oldPointer + 13;

您可能需要保留原始指针,以便在完成后释放内存块。 (如果您使用malloc()、{或calloc(),或相关函数之一}或您正在使用的库创建缓冲区,则需要在缓冲区上调用free(),以便在您释放它时释放它重新完成。您正在使用的库上的文档应该会告诉您是否需要释放缓冲区。这很重要。)

您也可以使用 C 函数 memmove() 将块的末尾复制 13 个字节,但没有真正的理由这样做。 (您不应该使用相关功能memcpy(),因为当移动的源和目标重叠时它可能无法正常工作。)

编辑:

@HotLicks,您真的应该发表您的评论作为答案,以便 OP 可以接受您的评论。自从你第一次发布它以来,你应该得到它的功劳。

【讨论】:

  • 好吧,我现在只是觉得很愚蠢......我已经尝试了很多(我的意思是很多)我在这里或网上找到的东西,解决方案就像这。无论如何,谢谢HotLicks,我将检查这个答案作为良好的回应(因为我不能在评论中这样做)。
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 2014-04-25
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多