1

我有一个关于从字符获取位图的问题,例如 A。

我已经在互联网上搜索,但没有直接的帮助。我找到了这个页面,其中描述了我的计划。

本站引述:

例如,字符 char="A" bits="227873781661662" 转换为二进制的“0000 0000 0000 0000 1100 1111 0011 1111 1111 1111 1100 1111 0011 1111 1101 1110”。

他们如何从 227873781661662 到 0000 0000 0000 0000 1100 1111 0011 1111 1111 1111 1100 1111 0011 1111 1101 1110?

int num = 227873781661662;
int n = log(num)/log(2)+1;          //Figure out the maximum power of 2 needed
NSString *result = @"";             //Empty string
for (int j=n; j>=0; j--)            //Iterate down through the powers of 2
{
    if (pow(2,j) >= num)            //If the number is greater than current power of 2
    {
        num -= pow(2,j);                             //Subtract the power of 2
        result = [result stringByAppendingString:@"1"]; //Add a 1 to result string
    }
    else result = [result stringByAppendingString:@"0"]; //Otherwise add a 0

    if (num == 0) break;                              //If we're at 0, stop
}
NSLog(@"num = %i",num);

这有什么问题?感谢帮助

4

3 回答 3

3

它们向您展示了 64 位二进制数的十进制表示。他们的代码将数字解释为倒置8x6的位矩阵,最初的 16 位部分被丢弃。

这些位在下面重新分组以说明发生了什么。我摸索了六位,并在下面添加了一个星号1和一个空格0来生成图像:

0000 0000 0000 0000 -- Thrown away
bits    image
------  ------
110011  **  **      
110011  **  **
111111  ******
111111  ******
110011  **  **
110011  **  **
111111  ******
011110   ****

在 Windows 上,您可以使用计算器应用程序将二进制转换为十进制并返回。选择[View/Programmer],然后选择“Bin”单选按钮。

以下是如何在 Objective C 中将数字转换为二进制:

long long num = 227873781661662L;
NSMutableString *res = [NSMutableString string];
while (res.length != 64) {
    [res insertString: [NSString stringWithFormat:@"%d", num%2] atIndex:0];
    num >>= 1;
}
于 2012-08-03T14:46:14.047 回答
2

要将数字从十进制转换为二进制:

long long num = 938409238409283409;
int n = log(num)/log(2)+1;          //Figure out the maximum power of 2 needed
NSString *result = @"";             //Start with empty string
for (int j=n; j>=0; j--)            //Iterate down through the powers of 2
{
    long long curPOW = powl(2,j);
    if (curPOW <= num)          //If the number is greater than current power of 2
    {
        num -= curPOW;                                  //Subtract the power of 2
        result = [result stringByAppendingString:@"1"]; //Add a 1 to result string
    }
    else result = [result stringByAppendingString:@"0"]; //Otherwise add a 0
}
NSLog(@"%@", result); //Result is now binary representation of num

对于num上面的示例,输出为: 在此处输入图像描述

于 2012-08-03T14:39:05.727 回答
2

227873781661662 是十进制的,显然 1 和 0 是二进制的。要将十进制转换为二进制,要么将数字分解为 2 的幂(即 2^0=1、2^1=2、2^2=4),这对于这样的大数字来说会很长,或者只使用计算器工具

于 2012-08-03T14:41:37.297 回答