Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将NSString转换为二进制字符串_Iphone_Objective C_Ios_Nsstring_Sha1 - Fatal编程技术网

Iphone 将NSString转换为二进制字符串

Iphone 将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 =

我有一个NSString表示一些数据的sha1散列,我需要将其转换为二进制字符串,但找不到任何好的解决方案。它应该相当于PHP的pack函数

结果应该是这样的:0xb7,0xc7,0x91,…,0x90


我需要将这个二进制文件转换成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));