Iphone 将NSString转换为二进制字符串
我有一个NSString表示一些数据的sha1散列,我需要将其转换为二进制字符串,但找不到任何好的解决方案。它应该相当于PHP的pack函数 结果应该是这样的:0xb7,0xc7,0x91,…,0x90Iphone 将NSString转换为二进制字符串,iphone,objective-c,ios,nsstring,sha1,Iphone,Objective C,Ios,Nsstring,Sha1,我有一个NSString表示一些数据的sha1散列,我需要将其转换为二进制字符串,但找不到任何好的解决方案。它应该相当于PHP的pack函数 结果应该是这样的:0xb7,0xc7,0x91,…,0x90 我需要将这个二进制文件转换成base64编码的字符串 您可以使用NSString+Base64目录轻松完成此操作。 代码应该是这样的: #import "NSString+base64.h" //.... //some codes //.... NSString *yourNSString =
我需要将这个二进制文件转换成base64编码的字符串 您可以使用
NSString+Base64
目录轻松完成此操作。
代码应该是这样的:
#import "NSString+base64.h"
//....
//some codes
//....
NSString *yourNSString = @"Some string you want to be encoded";
NSString *base64string = [yourNSString base64String];
以下是NSString+Base64.h文件的代码,例如:
//
// NSString+Base64.h
// HudsonGrowl
//
// Created by Benjamin Broll on 06.12.10.
//
// This source code is licensed under the terms of the BSD license.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#import <Foundation/Foundation.h>
@interface NSString (Base64)
+ (NSString *) base64StringFromData: (NSData *)data;
- (NSString *)base64String;
@end
//
//NSString+Base64.h
//哈德松罗
//
//本杰明·布罗尔于2010年12月6日创作。
//
//此源代码根据BSD许可证的条款进行许可。
//
//软件按“原样”提供,无任何形式的担保,
//明示或暗示,包括但不限于保证
//适销性、特定用途适用性和非侵权性。
//在任何情况下,作者或版权持有人均不对
//任何索赔、损害赔偿或其他责任,无论是在
//合同、侵权行为或其他,由、由或与之相关
//与软件或软件的使用或其他交易有关。
#进口
@接口NSString(Base64)
+(NSString*)base64StringFromData:(NSData*)数据;
-(NSString*)base64String;
@结束
以及NSString+Base64.m文件:
//
// NSString+Base64.m
// HudsonGrowl
//
// Created by Benjamin Broll on 06.12.10.
//
// This source code is licensed under the terms of the BSD license.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
// ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#import "NSString+Base64.h"
@implementation NSString (Base64)
+ (NSString *)encode:(const uint8_t *)input length:(NSInteger)length {
// this code seems to be floating on a lot of stackoverflow posts.
// i'm not aware of any license issues but let me know in case there are
// problems including the source in this project.
static char table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
NSMutableData *data = [NSMutableData dataWithLength:((length + 2) / 3) * 4];
uint8_t *output = (uint8_t *)data.mutableBytes;
for (NSInteger i = 0; i < length; i += 3) {
NSInteger value = 0;
for (NSInteger j = i; j < (i + 3); j++) {
value <<= 8;
if (j < length) {
value |= (0xFF & input[j]);
}
}
NSInteger index = (i / 3) * 4;
output[index + 0] = table[(value >> 18) & 0x3F];
output[index + 1] = table[(value >> 12) & 0x3F];
output[index + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '=';
output[index + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '=';
}
return [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease];
}
+ (NSString *) base64StringFromData: (NSData *)data {
return [self encode:data.bytes length:data.length];
}
- (NSString *)base64String {
NSData *data = [self dataUsingEncoding:NSUTF8StringEncoding];
return [NSString base64StringFromData:data];
}
@end
//
//NSString+Base64.m
//哈德松罗
//
//本杰明·布罗尔于2010年12月6日创作。
//
//此源代码根据BSD许可证的条款进行许可。
//
//软件按“原样”提供,无任何形式的担保,
//明示或暗示,包括但不限于保证
//适销性、特定用途适用性和非侵权性。
//在任何情况下,作者或版权持有人均不对
//任何索赔、损害赔偿或其他责任,无论是在
//合同、侵权行为或其他,由、由或与之相关
//与软件或软件的使用或其他交易有关。
#导入“NSString+Base64.h”
@实现NSString(Base64)
+(NSString*)编码:(const uint8_t*)输入长度:(NSInteger)长度{
//这段代码似乎漂浮在许多stackoverflow帖子上。
//我不知道有任何许可证问题,但如果有,请告诉我
//包括此项目中的源代码在内的问题。
静态字符表[]=“abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzo123456789+/=”;
NSMutableData*数据=[NSMutableData数据长度:((长度+2)/3)*4];
uint8_t*输出=(uint8_t*)data.mutableBytes;
对于(NSInteger i=0;i>12)&0x3F];
输出[索引+2]=(i+1)>6)和0x3F]:'=';
输出[索引+3]=(i+2)>0)&0x3F]:'=';
}
返回[[[NSString alloc]initWithData:data encoding:NSASCIIStringEncoding]autorelease];
}
+(NSString*)base64StringFromData:(NSData*)数据{
返回[自编码:data.bytes长度:data.length];
}
-(NSString*)base64String{
NSData*data=[自数据使用编码:NSUTF8StringEncoding];
返回[NSString base64StringFromData:data];
}
@结束
您可以直接从普通字符串转换为base64编码字符串您说它应该是base64,但您的“结果应该是这样”示例似乎是十六进制的(甚至不是整个字节字符串的十六进制表示,而是十六进制表示法中的每个字节)。是哪一个?感谢您的回复,但我对base64编码没有任何问题。但在我遵循的规范中,是为了1)查找sha1,2)将其转换为二进制字符串,3)从二进制中查找base64编码的字符串。或者在php中是这样的:base64_编码(pack(“H*”,sha1(sometext)));感谢您的回复,但我对base64编码没有任何问题。但在我遵循的规范中,是为了1)查找sha1,2)将其转换为二进制字符串,3)从二进制中查找base64编码的字符串。或者在php中是这样的:base64_编码(pack(“H*”,sha1(sometext));