1

A などのキャラクターからビットマップを取得する方法について質問があります。

私はすでにインターネットで検索していましたが、直接的な助けはありませんでした。私の計画が説明されているこのページを見つけました。

このサイトからの引用:

たとえば、文字 char="A" ビット="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 ビットの 2 進数の 10 進数表現を示しています。彼らのコードは、数値を逆さま8x6のビット行列として解釈し、最初の 16 ビット部分を破棄します。

何が起こっているかを説明するために、ビットを以下に再グループ化します。私は6ビットずつ手探りし、以下の画像を生成するためにアスタリスク1とスペースを入れました0:

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

Windows では、電卓アプリケーションを使用して、2 進数を 10 進数に変換したり、元に戻すことができます。[View/Programmer] を選択し、[Bin] ラジオ ボタンを選択します。

Objective C で数値を 2 進数に変換する方法は次のとおりです。

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

227873781661662 は 10 進数で、明らかに 1 と 0 は 2 進数です。10 進数を 2 進数に変換するには、数値を 2 の累乗(つまり、2^0=1、2^1=2、2^2=4) に分解します。電卓ツール

于 2012-08-03T14:41:37.297 に答える