我有一个关于从角色获取位图的问题,例如A。
我已经在网上搜索但没有直接的帮助。我找到了this页面,其中描述了我的计划。
本网站的报价:
e.g。 character 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);
这有什么问题?谢谢你的帮助
答案 0 :(得分:3)
它们显示64位二进制数的十进制表示。他们的代码将数字解释为颠倒的8x6
位矩阵,最初的16位部分被丢弃。
这些位在下面重新分组,以说明发生了什么。我按六位摸索,并为1
添加一个星号,为0
添加一个空格,以生成下面的图像:
0000 0000 0000 0000 -- Thrown away
bits image
------ ------
110011 ** **
110011 ** **
111111 ******
111111 ******
110011 ** **
110011 ** **
111111 ******
011110 ****
在Windows上,您可以使用计算器应用程序将二进制转换为十进制并返回。选择[查看/编程器],然后选择“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;
}
答案 1 :(得分: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
输出为:
答案 2 :(得分:2)
227873781661662是十进制的,显然1和0是二进制的。要将十进制转换为二进制break the number up into powers of 2(即,2 ^ 0 = 1,2 ^ 1 = 2,2 ^ 2 = 4),这对于像这样的大数字来说会很长,或者只是使用{{3 }}