相关疑难解决方法(0)

将NSData序列化为十六进制字符串的最佳方法

我正在寻找一种很好的可可方式将NSData对象序列化为十六进制字符串.我们的想法是将用于通知的deviceToken序列化,然后再将其发送到我的服务器.

我有以下实现,但我认为必须有一些更短更好的方法来实现它.

+ (NSString*) serializeDeviceToken:(NSData*) deviceToken
{
    NSMutableString *str = [NSMutableString stringWithCapacity:64];
    int length = [deviceToken length];
    char *bytes = malloc(sizeof(char) * length);

    [deviceToken getBytes:bytes length:length];

    for (int i = 0; i < length; i++)
    {
        [str appendFormat:@"%02.2hhX", bytes[i]];
    }
    free(bytes);

    return str;
}
Run Code Online (Sandbox Code Playgroud)

iphone notifications nsdata

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

如何在Swift中使用SHA1散列NSString?

在objective-c中它看起来像这样:

#include <sys/xattr.h>

@implementation NSString (reverse)

-(NSString*)sha1
{
    NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
    uint8_t digest[CC_SHA1_DIGEST_LENGTH];
    CC_SHA1(data.bytes, (int)data.length, digest);
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
    for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
        [output appendFormat:@"%02x", digest[i]];
    return output;
}

@end
Run Code Online (Sandbox Code Playgroud)

我需要Swift这样的东西,有可能吗?

请展示工作示例.

sha1 swift

55
推荐指数
4
解决办法
3万
查看次数

使用NSLog打印NSData

如何使用NSLog打印NSData对象的内容:

-(void) post:(NSString*) msg to:(NSString*) link{
    NSString *myRequestString = [NSString stringWithFormat:@"message=%@", msg];
    NSData *myRequestData = [NSData dataWithBytes: [myRequestString UTF8String] length: [myRequestString length]];
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [NSURL URLWithString: link]]; 
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
    [request setHTTPMethod: @"POST"];
    [request setHTTPBody: myRequestData];
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
    NSLog("%@", *returnData); //doesn't work

}
Run Code Online (Sandbox Code Playgroud)

我想打印*returnData的内容...

iphone objective-c

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

无法在swift中将NSData转换为NSString

这是我的功能.首先println打印正确的哈希到控制台,但在下一行程序崩溃.你能帮助我吗?

func sha256(string: NSString) -> NSString {
    var data : NSData! = string.dataUsingEncoding(NSUTF8StringEncoding)
    var hash = [UInt8](count: Int(CC_SHA256_DIGEST_LENGTH), repeatedValue: 0)
    CC_SHA256(data.bytes, CC_LONG(data.length), &hash)
    let res = NSData(bytes: hash, length: Int(CC_SHA256_DIGEST_LENGTH))
    println(res)
    let resstr = NSString(data: res, encoding: NSUTF8StringEncoding)
    println(resstr)
    return resstr
}
Run Code Online (Sandbox Code Playgroud)

nsstring nsdata swift

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

Amazon SNS ios设备令牌长度

我有一个iPhone应用程序我正在努力并试图让Amazon SNS设置为测试PNS.当我们向APNS注册应用程序时,它会提供一个32位的设备令牌(873DBDDA-17CF-4A24-88C6-990B90AFC4C3).使用Amazon SNS注册设备时,它表示设备令牌必须为64位长.我在这里错过了什么?

apple-push-notifications amazon-sns ios

7
推荐指数
1
解决办法
6352
查看次数

将NSData转换为Hex NSString

参考以下问题:将NSData转换为HEX NSString

我使用Erik Aigner提供的解决方案解决了这个问题,即:

NSData *data = ...;
NSUInteger capacity = [data length] * 2;
NSMutableString *stringBuffer = [NSMutableString stringWithCapacity:capacity];
const unsigned char *dataBuffer = [data bytes];
NSInteger i;
for (i=0; i<[data length]; ++i) {
  [stringBuffer appendFormat:@"%02X", (NSUInteger)dataBuffer[i]];
}
Run Code Online (Sandbox Code Playgroud)

但是,有一个小问题,如果后面有额外的零,则字符串值会有所不同.例如.如果hexa数据是字符串@"3700000000000000",则使用扫描程序转换为整数时:

unsigned result = 0;
NSScanner *scanner = [NSScanner scannerWithString:stringBuffer];
[scanner scanHexInt:&result];
NSLog(@"INTEGER: %u",result);
Run Code Online (Sandbox Code Playgroud)

结果将是4294967295,这是不正确的.不应该是55,因为只有hexa 37被采取?

那么如何摆脱零呢?

编辑:(回应CRD)

嗨,谢谢你澄清我的疑虑.那你要做的是直接从一个字节指针读取64位整数吧?不过我有另一个问题.你如何实际将NSData转换为字节指针?

为了让您更容易理解,我将解释我最初的所作所为.

首先,我显示了我拥有的文件的数据(数据是十六进制)

NSData *file = [NSData dataWithContentsOfFile:@"file path here"];
NSLog(@"Patch File: %@",file);
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述

接下来,我读取并偏移文件的前8个字节并将它们转换为字符串.

// 0-8 bytes
[file seekToFileOffset:0];
NSData *b …
Run Code Online (Sandbox Code Playgroud)

cocoa hex objective-c nsdata nsscanner

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

如何将NSData转换为NSString

我知道之前已经问过这个问题了,我已经采用了几种方法,但是它们不起作用.

以下是我已经尝试过的:

NSString *newStr = [NSString stringWithUTF8String:[responseData bytes]];
NSString *newStr = [NSString stringWithFormat:@"%.*s", [responseData length], [responseData bytes]];
Run Code Online (Sandbox Code Playgroud)

它们都不起作用.在第一种情况下,它用null填充newStr.在第二,它填充垃圾字符.我从调试器日志(po responseData)知道我得到了有效的响应,就像bbbbbb 00 bbbbbb.[服务器将它们作为字节数组发送]

该怎么办?

编辑:我从http请求响应中接收此数据 - 使用ASIHTTPRequest库,以防任何人可以在该行上提供帮助.

iphone nsstring nsdata ios

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

如何将NSdata转换为十六进制字符串?

我尝试使用以下代码将NSData转换为十六进制字符串值,但都错了?

这里的"结果"是我的NSdata

我需要一个十六进制字符串作为输出,但我没有得到它

NSUInteger dataLength = [result length];
  NSLog(@"%d",dataLength);
    NSMutableString *string = [NSMutableString stringWithCapacity:dataLength*2];
   const unsigned char *dataBytes = [result bytes];
    for (NSInteger idx = 0; idx < dataLength; ++idx) {        [string appendFormat:@"%02x", dataBytes[idx]];
 }    
    NSLog(@"%@",string);
Run Code Online (Sandbox Code Playgroud)

我怎么能转换这个请

更新:结果数据包含加密字符串.我想将其转换为十六进制值

hex objective-c nsstring ios

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

iOS中的AWS v2 SNS - createPlatformEndpoint:request

当我在SNS控制台中设置端点时,我有推动工作.现在我开始允许iOS应用程序创建端点.然后是订阅.

问题是BFTask *task = [sns createPlatformEndpoint:request];返回,task.result是零,而不是AWSSNSCreateEndpointResponse*.BTW,task.error也是零.

来自.h文件:

  • @return BFTask的一个实例.成功执行后,task.result将包含AWSSNSCreateEndpointResponse的实例.执行失败时,task.error可能包含带有AWSSNSErrorDomain domian的NSError和以下错误代码:AWSSNSErrorInvalidParameter,AWSSNSErrorInternalError,AWSSNSErrorAuthorizationError,AWSSNSErrorNotFound.

亚马逊已经在SDK v2中为SNS创建了网络示例.所以我也在寻找可能使用SDK v2创建端点和订阅的一些示例的人.

应用程序启动后,我调用我的方法:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    [self awsStartWithDeviceToken:deviceToken];
} 
Run Code Online (Sandbox Code Playgroud)

代码:

- (void)awsStartWithDeviceToken:(NSData *)deviceToken {

    // Get a hex string for the NSData deviceToken
    // http://stackoverflow.com/questions/7520615/how-to-convert-an-nsdata-into-an-nsstring-hex-string
    NSUInteger dataLength = [deviceToken length];
    NSMutableString *deviceTokenString = [NSMutableString stringWithCapacity:dataLength*2];
    const unsigned char *dataBytes = [deviceToken bytes];
    for (NSInteger idx = 0; idx < dataLength; ++idx) {
        [deviceTokenString appendFormat:@"%02x", dataBytes[idx]];
    }

    // Set the log level
    [AWSLogger …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch amazon-web-services ios

3
推荐指数
1
解决办法
1589
查看次数