将图像的NSData转换为字符串

时间:2016-07-17 20:19:59

标签: swift nsdata

我有一个名为image的NSData对象。这是一个非常小的.png文件。 package myproject.linklayer; import inet.linklayer.contract.IMACProtocol; import inet.linklayer.base.MACProtocolBase; simple MyMac extends MACProtocolBase like IMACProtocol { parameters: @display("i=block/rxtx"); @class(inet::MyMac); } 显示:

print(image)

我正在尝试制作一个适用于所有潜在图像的if语句。我想要检查前16个字符是<89504e47 0d0a1a0a 0000000d 49484452 0000000a 0000000a 08060000 008d32cf bd000000 01735247 4200aece 1ce90000 00097048 59730000 16250000 16250149 5224f000 00001c69 444f5400 00000200 00000000 00000500 00002800 00000500 00000500 00005ec1 07ed5500 00002a49 44415428 1562f88f 04181818 fea36398 34038c01 a2d11581 f8308060 11ab109b 691826e2 5284ac10 000000ff ff232a1e 6b000000 27494441 5463f80f 040c0c0c 3831481e 0418c004 0e856015 5002a742 644560c3 c0041613 c9560800 782fe719 4293f838 00000000 49454e44 ae426082> (这意味着它是一个png)。但是,我无法弄清楚如何将NSData中的字符转换为字符串,以便我可以将图像的前16个字符与我的字符串进行比较。

问题

如何将NSData转换为字符串以便我可以执行此操作?

89504e47 0d0a1a0a

编辑1

尝试:

if (string_of_image[1,18] ==  '89504e47 0d0a1a0a') {
    print("This is a .png")
}

给出:

var string1 = NSString(data: image, encoding: NSUnicodeStringEncoding)
print(string1)

编辑2

尝试:

Optional(襐乇ഊᨊ
䥈䑒

ࠆ㋏봀ų則䈀껎ᳩ    灈女ᘥᘥʼn判ᱩ䑏吀ȀԀ⠀ԀԀ廁߭唀⩉䑁吨ᕢИ᠘ﺣ掘㐃谁ꋑᖁ聠ᆫႛ椘⛢劄감ÿC⨞欀❉䑁呣Ќఌ㠱䠞И쀄຅怕倂Ꝃ摅惃쀄ᘓ쥖ࠀ砯䊓䥅乄깂悂)
n

给出错误:

var string1 = NSString(data: image, encoding: UInt)

3 个答案:

答案 0 :(得分:2)

您可以使用以下内容从NSData创建字符串

let yourString = NSString(data: NSData?, encoding: UInt)

答案 1 :(得分:2)

无需将图像数据转换为字符串。试试吧 例如,如果它们等于给定的字节序列,则为第一个字节 像这样:

let pngHeader: [UInt8] = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]
if imageData.length >= pngHeader.count {
    if memcmp(imageData.bytes, pngHeader, pngHeader.count) == 0 {
        print("PNG File")
    }
}

答案 2 :(得分:0)

或者直接比较NSData

let pngPrefix = NSData(bytes: [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a] as [UInt8], length: 8)

if imageData.length >= 8 && imageData.subdataWithRange(NSRange(location:0, length:8)) == pngPrefix {
  print("This is a .png")
}