ios – NSData查找字节序列

ios – NSData查找字节序列,第1张

概述我需要在图像数据中找到字节序列.我在 java上有下一个代码,但我需要在obj-c中使用相同的代码. Java的: private static int searchInBuffer(byte[] pBuf, int iBufferLen) { for(int i = 0; i<iBufferLen - 7; i++) { if (pBuf[i] == 'l' && pBu 我需要在图像数据中找到字节序列.我在 java上有下一个代码,但我需要在obj-c中使用相同的代码.
Java的:

private static int searchInBuffer(byte[] pBuf,int iBufferLen) {    for(int i = 0; i<iBufferLen - 7; i++) {        if (pBuf[i] == 'l' && pBuf[i + 1] == 'i' && pBuf[i + 2] == 'n' && pBuf[i + 3] == 'k')        return (int)pBuf[i + 4];    }    return -1;}public static int checkFlagInJpeg(String pFullfilename) {    int iRes = -1;    try {        file f = new file(pFullfilename);        fileinputStream is = new fileinputStream(f);        int iBufferSize = 6 * 1024,iCount = 15;        byte buf[] = new byte[iBufferSize];        while((is.available() > 0) && (iCount >= 0)) {            int iRead = is.read(buf),iFlag = searchInBuffer(buf,iRead);            if (iFlag > 0) {                iRes = iFlag;                break;            }            iCount--;        }        is.close();    }}

Obj-C(我的版本):

UIImage *image = [UIImage imageWithCGImage:[[[self.assets objectAtIndex:indexPath.row] defaultRepresentation] fullScreenImage]];    NSData *imageData = UIImageJPEGRepresentation(image,1.0f);    NSUInteger length = MIN(6*1024,[imageData length]);    Byte *buffer = (Byte *)malloc(length);    memcpy(buffer,[imageData bytes],length);    for (int i=0; i < length - 1; i++) {        if (buffer[i] == 'l' && buffer[i + 1] == 'i' && buffer[i + 2] == 'n' && buffer[i + 3] == 'k')            NSLog(@"%c",buffer[i + 4]);    }    free(buffer);

我仍然不确定,我理解字节工作的所有方面,所以我需要一个帮助.

更新:
问题在于获取图像数据.在Martin R.的帮助下,我将解决方案合二为一,并获得下一个工作代码:

ALAssetRepresentation *repr = [[self.assets objectAtIndex:indexPath.row] defaultRepresentation];        NSUInteger size = (NSUInteger) repr.size;        NSMutableData *data = [NSMutableData dataWithLength:size];        NSError *error;        [repr getBytes:data.mutableBytes fromOffset:0 length:size error:&error];        NSData *pattern = [@"link" dataUsingEnCoding:NSUTF8StringEnCoding];        NSRange range = [data rangeOfData:pattern options:0 range:NSMakeRange(0,data.length)];        int iRes = -1;        if (range.location != NSNotFound) {            uint8_t flag;            [data getBytes:&flag range:NSMakeRange(range.location + range.length,1)];            iRes = flag;        }        NSLog(@"%i",iRes);

它的工作完美!再次感谢你!

解决方法 NSData有一个方法rangeOfData:…您可以使用它来查找模式:

NSData *pattern = [@"link" dataUsingEnCoding:NSUTF8StringEnCoding];NSRange range = [imageData rangeOfData:pattern options:0 range:NSMakeRange(0,imageData.length)];

如果找到模式,请获取下一个字节:

int iRes = -1;if (range.location != NSNotFound && range.location + range.length < imageData.length) {    uint8_t flag;    [imageData getBytes:&flag range:NSMakeRange(range.location + range.length,1)];    iRes = flag;}
总结

以上是内存溢出为你收集整理的ios – NSData查找字节序列全部内容,希望文章能够帮你解决ios – NSData查找字节序列所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1010289.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存