删除 unsigned char* 的第一个字节

Remove first bytes of a unsigned char*

我目前正在处理一个项目,我需要在其中处理 unsigned char* 和不需要的字节。我来描述一下情况:

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

2/我把这个UIImage转成unsigned char*(感谢PaulSoft给的ImageHelper here

3/ 我将这个 unsigned char* 发送到一个在图像上施展魔法的库。

4/ 库发回一个 unsigned char* 数组开头的补充信息。

我在这里。我想删除这个数组的前 13 个字节,但我不知道该怎么做。 我试过将它转换为 NSString*,裁剪它并取回它。与 NSData* 相同。 我绝对不是 Objective-C 方面的专业人士,所以我愿意接受您的每一个想法。如果我不够清楚,请随时问我。

此致;

克里斯

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

char* newPointer = oldPointer + 13;

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

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

编辑:

@HotLicks,您真的应该 post 您的评论作为答案,以便 OP 可以接受您的评论。由于您 post 首先编辑了它,因此您应得的荣誉。