2009-08-17 4 views
1

я не понимаю, приводимые ниже, для преобразования Int в байты, приведенный ниже код Java может иметь возможность напечатать значение байта, как показано нижеNSString для печати в двоичном формате в

System.out.println ("двоичного выход: :: "+ Byte.toString (bo [0]));
System.out.println ("двоичный выход :::" + Byte.valueOf (bo [1]));
System.out.println ("двоичный выход :::" + Byte.valueOf (bo [2]));
System.out.println ("двоичный выход :::" + Byte.valueOf (bo [3]));
System.out.println ("двоичный выход :::" + новый String (bo));

двоичный выход 0 :::
двоичный выход 0 :::
двоичный выход 0 :::
двоичный выход 1 :::
двоичный выход ::: squaresquaresquaresquare (4 квадратных символов) - двоичные данные

но когда я сделать Objective-C код для одних и тех же данных в окончательном NSString также печатает как «0001», но не в двоичном формате (4 квадратных символов)

мне нужно NSString в двоичном формате как мне печать NSString в двоичном формате вместо «0001»

пожалуйста, помогите

+0

obj-c код uint8 barr [4]; barr [0] = (uint8) num; barr [1] = (uint8) num >> 8; barr [2] = (uint8) num >> 16; barr [3] = (uint8) num >> 24; Я использую [NSString stringwithFormat: @% i, barr [i]] который%? Мне нужно использовать, чтобы получить значение байта (двоичные данные), как оно есть из массива? – 2009-08-17 06:40:46

ответ

1

строка печатает целые числа, потому что это то, что вы кладете в него (% я == целое). % c - токен для символов.

Или вы можете просто передать массив в -[NSString initWithBytes:length:encoding:]. Если вы используете строку с одним байтом, используйте тот же метод, передавая указатель смещения в массив и длину одного.

+0

Привет kperry Я пробовал, но я не получаю значение байта, скопированное в NSString, любую идею? – 2009-08-18 06:26:05

+0

Мне нужно было бы увидеть код, который вы использовали, когда попробовали его, чтобы помочь вам больше. – kperryua

0

Пожалуйста, используйте следующий код

NSString *str = [ [NSString alloc] initWithBytes:barr length:sizeof(barr) encoding:NSUTF8StringEncoding]]; 

Я попытался кодировку ASCII также, но это дает лишь пустую строку.

4

вы могли бы использовать эту функцию

+ (NSString *)getBitStringForInt:(int)value { 

    NSString *bits = @""; 

    for(int i = 0; i < 8; i ++) { 
     bits = [NSString stringWithFormat:@"%i%@", value & (1 << i) ? 1 : 0, bits]; 
    } 

    return bits; 
} 
5

Если читаемость вопрос, позвольте мне предложить быструю процедуру, которая превратит Int в строку откусывания размера групп «1» и «0» символов :

NSString *binaryRepresentation(int value) 
{ 
    long nibbleCount = sizeof(value) * 2; 
    NSMutableString *bitString = [NSMutableString stringWithCapacity:nibbleCount * 5]; 

    for (int index = 4 * nibbleCount - 1; index >= 0; index--) 
    { 
     [bitString appendFormat:@"%i", value & (1 << index) ? 1 : 0]; 
     if (index % 4 == 0) 
     { 
      [bitString appendString:@" "]; 
     } 
    } 

    return bitString; 
} 

Так что
binaryRepresentation(1) возвращает 0000 0000 0000 0000 0000 0000 0000 0001
и
binaryRepresentation(1423) возвращается 0000 0000 0000 0000 0000 0101 1000 1111

2

Код

@interface NSString (BinaryStringRepresentation) 

+ (NSString *)binaryStringRepresentationOfInt:(long)value; 
+ (NSString *)binaryStringRepresentationOfInt:(long)value numberOfDigits:(unsigned int)length chunkLength:(unsigned int)chunkLength; 

@end 

@implementation NSString (BinaryStringRepresentation) 

+ (NSString *)binaryStringRepresentationOfInt:(long)value 
{ 
    const unsigned int chunkLength = 4; 
    unsigned int numberOfDigits = 8; 
    return [self binaryStringRepresentationOfInt:value numberOfDigits:numberOfDigits chunkLength:4]; 
} 

+ (NSString *)binaryStringRepresentationOfInt:(long)value numberOfDigits:(unsigned int)length chunkLength:(unsigned int)chunkLength 
{ 
    NSMutableString *string = [NSMutableString new]; 

    for(int i = 0; i < length; i ++) { 
     NSString *divider = i % chunkLength == chunkLength-1 ? @" " : @""; 
     NSString *part = [NSString stringWithFormat:@"%@%i", divider, value & (1 << i) ? 1 : 0]; 
     [string insertString:part atIndex:0]; 
    } 

    return string; 
} 

@end 

В использовании

NSLog(@"%@", [NSString binaryStringRepresentationOfInt:0]); 
NSLog(@"%@", [NSString binaryStringRepresentationOfInt:1]); 
NSLog(@"%@", [NSString binaryStringRepresentationOfInt:2]); 
NSLog(@"%@", [NSString binaryStringRepresentationOfInt:3]); 
NSLog(@"%@", [NSString binaryStringRepresentationOfInt:7]); 
NSLog(@"%@", [NSString binaryStringRepresentationOfInt:16]); 

Выходы

0000 0000 
0000 0001 
0000 0010 
0000 0011 
0000 0111 
0001 0000 
1
-(NSString *)toBinary:(NSInteger)input 
{ 
if (input == 1 || input == 0) { 
return [NSString stringWithFormat:@"%.8d", input]; 
} 
else 
{ 
NSString * myString = [NSString stringWithFormat:@"%@%d", [self toBinary:input/2], input % 2]; 
NSRange stringRange = {[myString length] - 8,8}; 
NSString *shortString = [myString substringWithRange:stringRange]; 
return shortString; 
} 
} 
Смежные вопросы