2013-03-05 76 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