2013-03-05 54 views
0

我想将UISlider值的value属性更改为其二进制形式。滑块值,int到二进制转换

至于我做了什么:

-(IBAction)setValue:(id)sender 
{ 

    int value =(int)([sliderValue value] *200); 


    NSLog(@"slider value int %i", value); 

    NSLog(@"hex 0x%02X",(unsigned int)value); 

    NSMutableArray *xx; 
    [xx addObject:[NSNumber numberWithInt:value]]; 

    NSLog(@"%@",xx); 

    NSInteger theNumber = [[xx objectAtIndex:value]intValue]; 
    NSLog(@"%@",theNumber); 
    NSMutableString *str = [NSMutableString string]; 
    NSInteger numberCopy = theNumber; // so won't change original value 
    for(NSInteger i = 0; i < 8 ; i++) { 
     // Prepend "0" or "1", depending on the bit 
     [str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0]; 
     numberCopy >>= 1; 
    } 

    NSLog(@"Binary version: %@", str); 

} 

然而,有一个问题。只要滑块值发生变化,它就会转换为整数和十六进制,但不能转换为二进制。任何人都可以帮我找到我犯了错误的地方吗?

+0

你是什么意思“它不是转换为二进制”?你会得到什么样的输出?你期望什么? – 2013-03-05 14:28:19

+0

当我增加或减少滑块(值)的变化,因为我希望该值每次都改变为二进制..如果你检查我的程序我改变滑块值从浮动到整型,就像我想转换为二进制 – Dian007 2013-03-05 14:31:00

+0

哦,我应该只是读了代码... – 2013-03-05 14:39:04

回答

2
- (IBAction)setValue:(id)sender 
{ 
    NSInteger value = (NSInteger)([sliderValue value] * 200.0); 

    NSMutableString *binaryString = [[NSMutableString alloc] init]; 
    for(NSInteger numberCopy = value; numberCopy > 0; numberCopy >>= 1) 
    { 
     // Prepend "0" or "1", depending on the bit 
     [binaryString insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0]; 
    } 

    NSLog(@"%@", binaryString); 
} 

这应该记录值的二进制表示。除了缺少数组的初始化器(为简洁起见,我完全删除了它),你的原始数据库存在缺陷,因为你使用的索引号从0到8,意味着它只记录该值的前8位。 NSInteger是32位或64位,这就是为什么你从Stack Overflow中取出的原始代码被检查,看看我们的位移值是否已经达到零。另外,NSInteger的正确说明符在NSInteger转换为long而不是%@后为%ld%@记录对象的description方法返回的字符串。

+0

thx花花公子的作品很好 – Dian007 2013-03-05 15:05:14

+0

@ Dian007不客气。 – Metabble 2013-03-05 15:06:03

0

此:

NSMutableArray *xx; 
[xx addObject:[NSNumber numberWithInt:value]]; 

不创建的NSMutableArray的一个实例,你只是声明了一个指针。 Alloc-init它,它会没事的。

+0

其实,虽然OP显然复制并粘贴了Adam Rosenfield的二进制转换代码片段,但他们搞砸了一些东西。首先,'NSInteger'不是8位,因此原始版本为什么不使用一个指令,而是检查以确保位移值仍高于零。另外,当他们应该使用'%d'时,他们试图记录一个'NSInteger'的值,因为他们将会是'NSNumber'。 – Metabble 2013-03-05 14:43:48

+0

@ h2co3,我也试过,它不工作:( – Dian007 2013-03-05 14:56:16