【问题标题】:Binary conversion algorithm in objective-cObjective-C中的二进制转换算法
【发布时间】:2011-11-24 00:47:04
【问题描述】:

如何从字节或整数中获取某个位的值?我能找到的唯一类似的答案是字符串中的特定字符。我正在尝试将二进制数转换为十进制数,也许有一种更简单的方法可以做到这一点,但我在想这个:将 2^(整数的位置从右边)乘以 1 或 0,具体取决于关于前面提到的位置处的整数值。有什么建议吗?

【问题讨论】:

标签: objective-c algorithm binary


【解决方案1】:
NSString * binary = @"0011010";
long value = strtol([b UTF8String], NULL, 2);

【讨论】:

  • 哇,我不知道它是如何工作的,但它让生活变得如此轻松。这是如何工作的?
【解决方案2】:

有多种方法可以获取字节或整数中的位值。这完全取决于您的需求。

一种方法是使用带有位运算符的掩码。

int result = sourceValue & 8;    // 8 ->  0x00001000
// result non zero if the 4th bit from the right is ON.

您还可以一位一位地移位并读取最右边的位。

for (int i = 0;  i < 8; i++)
    NSLog(@"Bit %d is %@", i, (sourceValue % 2 == 0) ? @"OFF" : @"ON");
    sourceValue = sourceValue >> 1;  // shift bits to the right for next loop.
}

或者如果你只是想要一个整数的文本表示,你可以让 NSNumber 来完成这项工作:

NSString* myString = [[NSNumber numberWithInt:sourceValue] stringValue];

【讨论】:

  • 非常感谢!我对编程很陌生,你能解释一下吗?源值是 int 吗? (sourceValue % 2 == 0) 是什么? @"OFF" : @"ON" 部分可以吗?
  • 在我的代码示例中,sourceValue 是一个int,并保存您要从中提取位的值。 (condition) ? value1 : value2 部分是 ternary operator。它类似于 if 语句。 a % bmodulo operator。它返回除法的其余部分a/b
猜你喜欢
  • 2014-04-17
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-02
  • 2021-07-29
  • 2021-02-26
  • 1970-01-01
  • 2019-04-09
相关资源
最近更新 更多