Iphone 如何将十六进制转换为二进制
我需要在objective-c中将十六进制字符串转换为二进制形式,请有人指导我好吗? 例如,如果我有一个十六进制字符串7fefff78,我想将其转换为1111111111 0111111111101111000 比尔,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
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
。