[英]NSInteger to binary (string) value in 8bit format
Jarret Hardie (thanks !) post this code yesterday to convert a NSinteget to binary, and works perfectly, but i need in 8bit format: Jarret Hardie(谢谢!)昨天发布此代码将NSinteget转换为二进制,并且工作正常,但我需要8位格式:
4 -> 00000100 4 - > 00000100
any ideas to modify this code? 有什么想法来修改这段代码吗?
// Original author Adam Rosenfield... SO Question 655792
NSInteger theNumber = 56;
NSMutableString *str = [NSMutableString string];
for(NSInteger numberCopy = theNumber; numberCopy > 0; numberCopy >>= 1)
{
// Prepend "0" or "1", depending on the bit
[str insertString:((numberCopy & 1) ? @"1" : @"0") atIndex:0];
}
NSLog(@"Binary version: %@", str);
Thanks !!!!!! 谢谢 !!!!!!
This should work: 这应该工作:
NSInteger theNumber = 56;
NSMutableString *str = [NSMutableString string];
NSInteger numberCopy = theNumber; // so you won't change your 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);
If anybody's interested, here is my version that: 如果有人有兴趣,这是我的版本:
Snippet: 片段:
NSString *NSStringWithBits(int64_t mask) {
NSMutableString *mutableStringWithBits = [NSMutableString new];
for (int8_t bitIndex = 0; bitIndex < sizeof(mask) * 8; bitIndex++) {
[mutableStringWithBits insertString:mask & 1 ? @"1" : @"0" atIndex:0];
mask >>= 1;
}
return [mutableStringWithBits copy];
}
In reference, and in support of @vincent osinga's answer.. Here is that code, wrapped in a C-function.. that returns the binary "string" from an NSUInteger.. perfect for logging bitwise typedef's, etc. 在参考,并支持@vincent osinga的答案..这是代码,包含在一个C函数..从NSUInteger返回二进制“字符串”..完美的记录按位typedef等。
- (NSString*) bitString:(NSUInteger) mask{
NSString *str = @"";
for (NSUInteger i = 0; i < 8 ; i++) {
// Prepend "0" or "1", depending on the bit
str = [NSString stringWithFormat:@"%@%@",
mask & 1 ? @"1" : @"0", str];
mask >>= 1;
}
return str;
}
I don't think NSInteger numberCopy = theNumber;
我不认为 NSInteger numberCopy = theNumber;
is necessary as you're not using a pointer, but simply the primitive value as an argument, // so you won't change your original value
. 是必要的,因为你没有使用指针,只是原始值作为参数, // so you won't change your original value
。 This will enable use as / yield results like... 这将使用as / yield结果如...
NSEventType anEvent = NSLeftMouseUp|NSLeftMouseDown;
NSLog(@"%@, %u\n%@, %u\n%@, %u\n%@, %u",
bitString( NSScrollWheel), NSScrollWheel,
bitString( NSLeftMouseUp|NSLeftMouseDown),
NSLeftMouseUp|NSLeftMouseDown,
bitString( anEvent ), anEvent,
bitString( NSAnyEventMask ), NSAnyEventMask);
NSLOG ➞ NSLOG➞
00010110, 22 /* NSScrollWheel */
00000011, 3 /* NSLeftMouseUp | NSLeftMouseDown */
00000011, 3 /* same results with typedef'ed variable */
11111111, 4294967295 /* NSAnyEventMask */
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.