アカウント名:
パスワード:
20が0x20のスペースだったとして普段0が0x30として扱われてない不思議も気になります
リトルエンディアンで格納すると「50 12 20 20 20 20 20 20」というバイトオーダになる
なりません。「20 20 20 20 20 20 50 12」でしょう。 @@@@@@p2
構造体が下みたいになってて、
struct Price { unsigned char dollar[7]; unsigned char cent;};
設定するのに、こう書いたら早いんじゃね?
struct Price pr;sprintf(pr.dollar, "%7s", d);pr.cent = c;
みたいなノリでやっちゃったとか。
これは整数型の話ですよね?
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
フレームのもと覚悟、でも言わずにはいられない (スコア:2, すばらしい洞察)
2 進数でゼロが ………
</blockquote>
2 進数だろうが、10 進数だろうが 0 は 0 なんだよ 8-)
Re: (スコア:0)
20が0x20のスペースだったとして普段0が0x30として扱われてない不思議も気になります
Re:フレームのもと覚悟、でも言わずにはいられない (スコア:2)
char型配列を用いて多バイト長整数の値を設定する関数があったとします。
数字が10進数文字列で保存されていたとすれば、
数字はちゃんと処理されてスペースが0x20のまま処理されたとしても、
例えば、"123"の値は 1*100 + 2*10 + 3になるのだから、
" 3"の値は 20*100 + 20*10 + 3になると考えるのが自然だが、
20*256^2 + 20*256 + 3になっているように見える。
数字が文字列でなくバイナリで保存されていてbyteごとに処理していたなら、0x20も妥当な数字として意味を持つはず。
数字が16進文字列で保存されているならば、例えば頭に4つ連続したスペースが入ると、
'0'から'f'には適切な処理が行われて、0x20はそのまま読み込まれるとしても
0x20*0x1000 + 0x20*0x100 + 0x20*0x10 + 0x20 = 0x22220
のように、頭に0x22が出てくるはず。
なので、値を設定する関数の間違いではないと思うのです。
つまり内部構造を理解せずに内部構造を直接いじったバカがいたのではないか、と。
多バイト長整数が
struct BigInt{
unsigned char nums[BIGINT_LEN];
};
のような感じで実装されていて、整数がバイナリで入っているとしましょう。
きっと、彼は、数字を右揃えで表示したかった。
どうすればいいか考えていたら、多バイト整数型が(unsigned) charの配列で実現されていることを発見した。
「そうか!数字は文字列として保存されてるんだ!」
→配列の頭に' 'を入れる
1を聞いて0を知れ!
Re:フレームのもと覚悟、でも言わずにはいられない (スコア:1)
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i;
char digit[8] = {0x70, 0x32, 0x40, 0x40, 0x40, 0x40, 0x40};
for (i = 0; i < 8; i++)
putchar(digit[i]);
putchar('\n');
exit(EXIT_SUCCESS);
}
おい、ヤナワ実行してみてくれ。
p2@@@@@
………
Re: (スコア:0)
なりません。「20 20 20 20 20 20 50 12」でしょう。
@@@@@@p2
Re: (スコア:0)
構造体が下みたいになってて、
設定するのに、こう書いたら早いんじゃね?
みたいなノリでやっちゃったとか。
Re: (スコア:0)
Re:フレームのもと覚悟、でも言わずにはいられない (スコア:1)
Re: (スコア:0)
これは整数型の話ですよね?