Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.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 如何将十六进制转换为二进制_Iphone_Objective C - Fatal编程技术网

Iphone 如何将十六进制转换为二进制

Iphone 如何将十六进制转换为二进制,iphone,objective-c,Iphone,Objective C,我需要在objective-c中将十六进制字符串转换为二进制形式,请有人指导我好吗? 例如,如果我有一个十六进制字符串7fefff78,我想将其转换为1111111111 0111111111101111000 比尔, Suppi只需逐个转换每个数字:0->0000,7->0111,F->1111,等等。一个小小的查找表可以使这非常简洁 数基是另一个基的幂的美:-)很好的递归解决方案 NSString *hex = @"49cf3e"; NSUInteger hexAsInt; [[NSScan

我需要在objective-c中将十六进制字符串转换为二进制形式,请有人指导我好吗? 例如,如果我有一个十六进制字符串7fefff78,我想将其转换为1111111111 0111111111101111000

比尔,
Suppi

只需逐个转换每个数字:
0->0000
7->0111
F->1111
,等等。一个小小的查找表可以使这非常简洁


数基是另一个基的幂的美:-)

很好的递归解决方案

NSString *hex = @"49cf3e";
NSUInteger hexAsInt;
[[NSScanner scannerWithString:hex] scanHexInt:&hexAsInt];
NSString *binary = [NSString stringWithFormat:@"%@", [self toBinary:hexAsInt]];

-(NSString *)toBinary:(NSUInteger)input
{
    if (input == 1 || input == 0)
        return [NSString stringWithFormat:@"%u", input];
    return [NSString stringWithFormat:@"%@%u", [self toBinary:input / 2], input % 2];
}

例如,如果需要前导零,则18返回00011000而不是11000

-(NSString *)toBinary:(NSUInteger)input strLength:(int)length{
        if (input == 1 || input == 0){

         NSString *str=[NSString stringWithFormat:@"%u", input];
            return str;
        }
        else {
            NSString *str=[NSString stringWithFormat:@"%@%u", [self toBinary:input / 2 strLength:0], input % 2];
            if(length>0){
                int reqInt = length * 4;
                for(int i= [str length];i < reqInt;i++){
                    str=[NSString stringWithFormat:@"%@%@",@"0",str];
                }
            }
            return str;
        }  
}
 NSString *hex = @"58";
 NSUInteger hexAsInt;
 [[NSScanner scannerWithString:hex] scanHexInt:&hexAsInt];
 NSString *binary = [NSString stringWithFormat:@"%@", [self toBinary:hexAsInt strLength:[hex length]]];
NSLog(@"binario %@",binary);
-(NSString*)toBinary:(nsinteger)输入strLength:(int)length{
如果(输入=1 | |输入=0){
NSString*str=[NSString stringWithFormat:@“%u”,输入];
返回str;
}
否则{
NSString*str=[NSString stringWithFormat:@“%@%u”,[self toBinary:input/2 strLength:0],input%2];
如果(长度>0){
int REQUINT=长度*4;
for(int i=[str length];i
我同意kerrek SB的回答,并尝试了这个。 这是我的工作

+(NSString *)convertBinaryToHex:(NSString *) strBinary
{
    NSString *strResult = @"";
    NSDictionary *dictBinToHax = [[NSDictionary alloc] initWithObjectsAndKeys:
                                  @"0",@"0000",
                                  @"1",@"0001",
                                  @"2",@"0010",
                                  @"3",@"0011",

                                  @"4",@"0100",
                                  @"5",@"0101",
                                  @"6",@"0110",
                                  @"7",@"0111",

                                  @"8",@"1000",
                                  @"9",@"1001",
                                  @"A",@"1010",
                                  @"B",@"1011",

                                  @"C",@"1100",
                                  @"D",@"1101",
                                  @"E",@"1110",
                                  @"F",@"1111", nil];

    for (int i = 0;i < [strBinary length]; i+=4)
    {
        NSString *strBinaryKey = [strBinary substringWithRange: NSMakeRange(i, 4)];
        strResult = [NSString stringWithFormat:@"%@%@",strResult,[dictBinToHax valueForKey:strBinaryKey]];
    }
    return  strResult;
}
+(NSString*)convertBinaryToHex:(NSString*)标准二进制
{
NSString*strResult=@;
NSDictionary*dictBinToHax=[[NSDictionary alloc]initWithObjectsAndKeys:
@"0",@"0000",
@"1",@"0001",
@"2",@"0010",
@"3",@"0011",
@"4",@"0100",
@"5",@"0101",
@"6",@"0110",
@"7",@"0111",
@"8",@"1000",
@"9",@"1001",
@“A”@“1010”,
@“B”@“1011”,
@"C,"1100,,
@“D”@“1101”,
@“E”@“1110”,
@"F,"1111,无";;
对于(整数i=0;i<[二进制长度];i+=4)
{
NSString*strBinaryKey=[strBinary substringWithRange:NSMakeRange(i,4)];
strResult=[NSString stringWithFormat:@“%@%@”,strResult[dictBinToHax valueForKey:strBinaryKey]];
}
返回strResult;
}

的副本我很确定其中一个是相反的,不是副本。手动转换?将16个案例编码为开关样式语句?:)@Jonathan:一个查找表会提示它自己,而不是一个switch语句。在这个重复的问题上有一个程序化的答案:。你的解决方案会起作用,但对一个数学问题的多项选择进行硬编码是一个笨拙的解决方案。还有更好、更简洁、更优雅的。@Jonathan M:你发布的链接与OP要求的正好相反。虽然标准为
strtol
,但标准中没有
ltostr