标签: nsdata

尝试编写NSString sha1函数,但它返回null

我有以下Objective-C函数:

+(NSString *)stringToSha1:(NSString *)str{
    NSMutableData *dataToHash = [[NSMutableData alloc] init];
    [dataToHash appendData:[str dataUsingEncoding:NSUTF8StringEncoding]];

    unsigned char hashBytes[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1([dataToHash bytes], [dataToHash length], hashBytes);
    NSData *encodedData = [NSData dataWithBytes:hashBytes length:CC_SHA1_DIGEST_LENGTH];
    [dataToHash release];
    NSString *encodedStr = [NSString stringWithUTF8String:[encodedData bytes]];
    //NSString *encodedStr = [[NSString alloc]  initWithBytes:[encodedData bytes]
    //                                            length:[encodedData length] encoding: NSUTF8StringEncoding];
    NSLog(@"String is %@", encodedStr);

    return encodedStr;

}
Run Code Online (Sandbox Code Playgroud)

我要做的是采用NSString和SHA1编码.这部分似乎正在起作用,我认为我所处的位置是如何将NSData对象转换回清晰的字符串.如果我使用UTF8编码,我会变成空白,如果我说ASCII,我会得到奇怪的字符.我真正想要的是十六进制字符串,但我不知道如何获得它.这是使用iPhone 3.0 SDK.

目前,我传入的任何String都会返回NULL.

iphone sha1 objective-c nsstring nsdata

5
推荐指数
2
解决办法
1万
查看次数

在NSArray中存储结构

回到我每天愚蠢的问题.今天我正在尝试在NSArray中放置一个结构.好吧,这很容易,将它包装在NSData中.如果你认识我,你知道你将会看到代码.在这个例子中,我将一个从Wavefront OBJ加载到结构中的顶点线并将其粘贴在一个数组中.

        NSArray *verticeLineParts = [currentLine componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
        Coordinate c = CoordinateMake([[verticeLineParts objectAtIndex:1] floatValue],
                                      [[verticeLineParts objectAtIndex:2] floatValue],
                                      [[verticeLineParts objectAtIndex:3] floatValue]);
        [vertices addObject:[[NSData alloc] initWithBytes:&c length:sizeof(c)]];
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常.输出中的前几个对象:

2010-10-18 14:18:08.237 ObjLoader[3778:207] (
    <5d1613bd 13f3da3f 8ac745bd>,
    <f04c28bd 13f3da3f d88048bd>,
    <649427bd d61ddb3f d88048bd>,
    <477625bd d845db3f d88048bd>,
    <4c1722bd 1668db3f d88048bd>,
Run Code Online (Sandbox Code Playgroud)

在从阵列中拉出它们之后将它们打印出来,而不是那么多.违规代码:

for (int i = 0; i < [vertices count]; i++) {
    Coordinate c;
    fillCoordinateFromData(c, [vertices objectAtIndex:i]);
    NSLog(@"%@", CoordinateToNSString(c));
}

[snip]

void fillCoordinateFromData(Coordinate c, NSData *d) {
    void *bytes = malloc(12);
    [d getBytes:bytes];
    memcpy((void *)&c, …
Run Code Online (Sandbox Code Playgroud)

c struct objective-c wavefront nsdata

5
推荐指数
1
解决办法
4394
查看次数

将NSData转回纯文本NSString

我有一个简单的NSString,我将它转换为NSData:

NSData *data = [[NSData dataWithBytes:[[NSString stringWithFormat:@",%@",self.targetId] dataUsingEncoding:NSASCIIStringEncoding] 
                              length:[[NSString stringWithFormat:@",%@",self.targetId] lengthOfBytesUsingEncoding:NSASCIIStringEncoding]] retain];
Run Code Online (Sandbox Code Playgroud)

现在我想从NSData对象中获取纯文本.
如果我这样做:

NSString* dataStr = [NSString stringWithFormat:@"%@",data];
Run Code Online (Sandbox Code Playgroud)

- 我只得到一个十六进制表达式(即<9c3f473e 02000000 0b0000>)而不是我想要的普通字符串!

我也尝试过使用initWithData -

    NSString* dataStr = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

但无论我给出哪种编码,它总是表现得很狡猾.

你能帮忙吗?:)

iphone nsstring nsdata

5
推荐指数
1
解决办法
3703
查看次数

从AVAssetWriter读取实时H.264输出时数据损坏

我正在使用一些技巧来尝试在写入磁盘时读取AVAssetWriter的原始输出.当我通过连接它们重新组装单个文件时,生成的文件与AVAssetWriter的输出文件具有相同的确切字节数.但是,重新组装的文件将无法在QuickTime中播放或由FFmpeg解析,因为存在数据损坏.这里和那里的几个字节已经改变,使得结果文件无法使用.我假设这发生在每次读取的EOF边界上,但它不是一致的损坏.

我计划最终使用与此类似的代码从编码器中解析出单个H.264 NAL单元以将它们打包并通过RTP发送它们,但是如果我不相信从磁盘读取的数据,我可能不得不使用另一种解决方案.

是否有解释/修复此数据损坏?您是否有任何其他资源/链接可以解析如何解析NAL单元以通过RTP进行打包?

完整代码:AVAppleEncoder.m

// Modified from
// http://www.davidhamrick.com/2011/10/13/Monitoring-Files-With-GCD-Being-Edited-With-A-Text-Editor.html
- (void)watchOutputFileHandle
{
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    int fildes = open([[movieURL path] UTF8String], O_EVTONLY);

    source = dispatch_source_create(DISPATCH_SOURCE_TYPE_VNODE,fildes,
                                                              DISPATCH_VNODE_DELETE | DISPATCH_VNODE_WRITE | DISPATCH_VNODE_EXTEND | DISPATCH_VNODE_ATTRIB | DISPATCH_VNODE_LINK | DISPATCH_VNODE_RENAME | DISPATCH_VNODE_REVOKE,
                                                              queue);
    dispatch_source_set_event_handler(source, ^
                                      {
                                          unsigned long flags = dispatch_source_get_data(source);
                                          if(flags & DISPATCH_VNODE_DELETE)
                                          {
                                              dispatch_source_cancel(source);
                                              //[blockSelf watchStyleSheet:path];
                                          }
                                          if(flags & DISPATCH_VNODE_EXTEND)
                                          {
                                              //NSLog(@"File size changed");
                                              NSError *error = nil;
                                              NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingFromURL:movieURL error:&error];
                                              if (error) {
                                                  [self …
Run Code Online (Sandbox Code Playgroud)

objective-c nsdata h.264 grand-central-dispatch avassetwriter

5
推荐指数
1
解决办法
3595
查看次数

Swift问题中的NSData到String

我在swift中将NSData转换为NSString时遇到问题.我正在使用我认为正确的命令和格式:NSString(data: <DATA>, encoding: <ENCODING>)但无论我做什么,我总是以零值结束.我正在运行最新的Xcode测试版,所以我不确定这是否相关,但我希望这是一个简单的错误,我遇到了.

我附上了游乐场代码和屏幕截图.

Xcode 6.3 Beta 2 Build(6D532l)游乐场代码

import Foundation

//: # NSData to String Conversion Playground
//: ### Step 1
//: The first step is to take an array of bytes and conver them into a NSData object.  The bytes are as follows:

var testBytes : [UInt8] = [0x14, 0x00, 0xAB, 0x45, 0x49, 0x1F, 0xEF, 0x15, 0xA8, 0x89, 0x78, 0x0F, 0x09, 0xA9, 0x07, 0xB0, 0x01, 0x20, 0x01, 0x4E, 0x38, 0x32, 0x35, 0x56, 0x20, 0x20, 0x20, …
Run Code Online (Sandbox Code Playgroud)

xcode nsdata ios swift

5
推荐指数
2
解决办法
2万
查看次数

在swift中对特定值进行拆分或分块NSData

我正在试图找出如何NSData在特定值上"chunk"a .

输入数据

7E 55 33 22 7E 7E 22 AE BC 7E 7E AA AA 00 20 00 22 53 25 A3 4E 7E

输出数据

返回一个由3个元素组成的数组,[NSData]其中元素为:

  • 55 33 22
  • 22 AE BC
  • AA AA 00 20 00 22 53 25 A3 4E

我在哪里

我知道我可以这样做:

var ptr = UnsafePointer<UInt8>(data.bytes)
var bytes = UnsafeBufferPointer<UInt8>(start: ptr, count: data.length)
Run Code Online (Sandbox Code Playgroud)

而且我想通过做类似的比较迭代:

bytes[1] == UInt8(0x7E)
Run Code Online (Sandbox Code Playgroud)

我想建立"范围",但我想知道是否有更好的方法来解决这个问题?

代码存根

private fund chunkMessage(data: NSData) -> [NSData] {
  var ptr = UnsafePointer<UInt8>(data.bytes)
  var bytes = …
Run Code Online (Sandbox Code Playgroud)

nsdata ios swift

5
推荐指数
3
解决办法
6925
查看次数

Swift中的Checksum和XOR

我在Objective-C中对这些方法进行了研究.它们只是校验和而XORNSData

- (void)XOR:(NSMutableData *)inputData withKey:(NSData *)key
{
    unsigned char* inputByteData = (unsigned char*)[inputData mutableBytes];
    unsigned char* keyByteData   = (unsigned char*)[key bytes];
    for (int i = 0; i < [inputData length]; i++)
    {
        inputByteData[i] = inputByteData[i] ^ keyByteData[i % [key length]];
    }
}

- (Byte)checkSum:(NSMutableData *)data withLength:(Byte)dataLength
{
    Byte * dataByte = (Byte *)malloc(dataLength);
    memcpy(dataByte, [data bytes], dataLength);

    Byte result = 0;
    int count = 0;
    while (dataLength>0) {
        result += dataByte[count];
        dataLength--;
        count++;
    };
    result = result&0xff;
    return result&0xff; …
Run Code Online (Sandbox Code Playgroud)

bitwise-operators nsdata ios swift

5
推荐指数
2
解决办法
3274
查看次数

将pdf的NSData转换为图像文件的NSData

嗨,我正在尝试将pdf文件另存为jpg文件。我有许多要查询的网址,这些网址链接都是1页pdf文件。

var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let urlRequest = NSURLRequest(URL: NSURL(string: downloadUrl[index])!)
NSURLConnection.sendAsynchronousRequest(urlRequest, queue: NSOperationQueue.mainQueue()) { (response, data, error) -> Void in

  var savePath = path.stringByAppendingPathComponent(file_name + ".jpg")

  if let httpResponse = response as? NSHTTPURLResponse {
    if let contentType = httpResponse.allHeaderFields["Content-Type"] as? NSString {
      let fileType = contentType.componentsSeparatedByString("/").last! as! String
      if fileType == "pdf" {

        // convert to jpg before saving!

        NSFileManager.defaultManager().createFileAtPath(savePath, contents: convertedData, attributes: nil)
      } else {
        NSFileManager.defaultManager().createFileAtPath(savePath, contents: data, attributes: nil)
      }

      self.tableView.reloadData()
    } …
Run Code Online (Sandbox Code Playgroud)

pdf nsdata ios swift

5
推荐指数
0
解决办法
2114
查看次数

来自UInt8的NSData

我最近在swift中找到了一个源代码,我正在尝试将它转换为Objective-C.我无法理解的一件事是:

var theData:UInt8!

theData = 3;
NSData(bytes: [theData] as [UInt8], length: 1)
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我使用Obj-C等效物吗?

为了给你一些上下文,我需要将UInt8作为UInt8发送到CoreBluetooth外设(CBPeripheral).浮点数或整数不起作用,因为数据类型太大.

xcode objective-c nsdata ios swift

5
推荐指数
2
解决办法
8485
查看次数

如何使用NSData处理大文件?

我有一个非常大的视频,我需要将这个视频分块,然后将其上传到Dropbox.

我试图使用NSData,但因为这个文件太大,我的应用程序总是崩溃,所以我不知道我现在能做什么.

对于较小的视频,我使用了这个:

NSData(contentsOfURL: self.newAsset.URL)!.subdataWithRange(NSMakeRange(0, 10000000))
Run Code Online (Sandbox Code Playgroud)

我没有任何问题,但是当视频太大时我有一个错误:

无法分配内存

那么,我可以做些什么来分块大型视频的数据呢?

nsdata ios avurlasset swift swiftydropbox

5
推荐指数
1
解决办法
790
查看次数