我正在寻找一种很好的可可方式将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) 当我调用-description一个NSData对象时,我看到一个NSData对象字节的十六进制字符串,如:
<f6e7cd28 0fc5b5d4 88f8394b af216506 bc1bba86 4d5b483d>
Run Code Online (Sandbox Code Playgroud)
我希望将数据的这种表示(减去lt/gt引号)放入内存中,NSString这样我就可以使用它.我不想调用-[NSData description]然后只修剪lt/gt引号(因为我认为这不是NSData公共界面的保证方面,并且将来会发生变化.
将NSData对象表示为NSString对象(除了调用之外-description)的最简单方法是什么?
对不起,如果这看起来很简单,我就是无法在网上找到它.
我有一个十六进制的UInt8,我需要得到一个十进制.我如何在swift中实现这一目标?
例如:
"FF"
谢谢
我基本上是在尝试使用String并在php中执行以下操作:
$signature= base64_encode(hash_hmac('sha1', $data, $secretKey, true));
Run Code Online (Sandbox Code Playgroud)
但是,在Swift中进行操作 ...我看到很多关于其他人试图使用CommonCrypto进行操作的帖子,但是该模块似乎没有安装。
所以确实有3个问题:
我当前的代码如下所示:
var authString:String = "PUT\nTEST=BLAH\nTEST2=BLAHBLAHBLAH"
let hmacResult:String = authString.sha1()
...
extension String {
func sha1() -> String {
//Do Something...
}
}
Run Code Online (Sandbox Code Playgroud)