10進数を16進数に変える方法について
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG00022
NGNG00033
NGNG00043
NGNG00055
NGNG00066
NGNG00077
NGNG0008八
NGNG00099
NGNG001010
NGNG0011B
NGNG0012C
NGNG0013D
NGNGほら、これが10進数を16進数に変える方法だね。
0014E
NGNG0015F
NGNG0016sage
NGNG0017デフォルトの名無しさん
NGNG0018&H12
NGNG0019デフォルトの名無しさん
NGNGsprintf(str,"%X",num);
go to google;
0020デフォルトの名無しさん
NGNG>>18は妖怪人間ベム
0021デフォルトの名無しさん
NGNGたとえば、「A6B」。
B = 11
6 = 6 * 16 = 96
A = 10 * 16 * 16 = 2560
11 + 96 + 2560 = 2667。電卓で確認してみて。
つまり・・・。 (換算して出た数(A=10,B=11…) * (16の(ビット目)乗)) + … をビット数分繰り返す。
……電卓使ったほうがはるかに簡単。
マジレスすまん。
0022デフォルトの名無しさん
NGNGおーい、10進数を16進数に変える方法を聞いているんだぞ。それだと逆だろう。
0023デフォルトの名無しさん
NGNGmain()
{
char str[] = "10進数";
puts(str);
str[1] = '6';
puts(str);
}
0024デフォルトの名無しさん
NGNG16進数は全角ですよ。
0025デフォルトの名無しさん
NGNGほんとだ。よく見てんな。
しかしなにゆえに全角になってんだ?
0026デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNG0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG# ruby -e 'puts "%x" % 10'
a
0031名無し
NGNG商を求める際には余りを記録しておく。
商が0になったら、余りを後ろから順に並べる。それが答え。
例えば10進数300を16進数に変えるなら
300 / 16 = 18 余り 12(C)
18 / 16 = 1 余り 2
1 / 16 = 0 余り 1
で、下から順に余りを並べたのが答え。
つまり16進数12Cが10進数300になる。
0032デフォルトの名無しさん
NGNGwhile (a) {
b = a % 16;
a /= 16;
*buf-- = b + b>9?('a'-10):'0';
}
0033デフォルトの名無しさん
NGNGこのコードって動いてる?
0034デフォルトの名無しさん
NGNG不吉なコード
かならずよくないことがおこる
0036デフォルトの名無しさん
NGNG× *buf-- = b + b>9?('a'-10):'0';
○ *buf-- = b + (b>9?('a'-10):'0');
bufは、適当なchar配列の後方にポイントしておく(NULのひとつ手前に)
0037デフォルトの名無しさん
NGNG中学校の数学なら<sub>(16)</sub>って感じだNE!
0038デフォルトの名無しさん
NGNGマッチを1本だけ動かして16にしなさい。
0039デフォルトの名無しさん
NGNG処理系はなんですか?
0040hage
NGNG_
| | ̄| \\ | |_
| |_| // | |_|
0041デフォルトの名無しさん
NGNG| _ \\ |_
| |_| // | |_|
だとばっかり‥‥
0042デフォルトの名無しさん
NGNG?HEX$(A)
だろ? 桁幅調整したいなら
?RIGHT$("000"+HEX$(A),4)
でもいいと思うよ。
0043ひろゆ子@暫定管&rlo;&lre;直人
NGNG0044ひろゆ子@暫定管&rlo;&lre;直人
NGNG0045ひろゆ子@暫定管&rlo;&lre;直人& ◆ekkdFK/o
NGNG0046デフォルトの名無しさん
NGNGってついついやっちゃうけど、これってコスト高いんだよね
0047デフォルトの名無しさん
NGNG↓
諸外国に戦争ふっかけて勝利する。
↓
16進数の使用を奨励する。
↓
頃合を見て、憲法で10進数使用を禁止する。
ま、がんばってくれ >1
0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGそうなんだよ
結構遅いしメモリつーかスタック使うし・・・
0052デフォルトの名無しさん
NGNGstatic char *_toHex(char *buf, unsigned int x){
if (15 < x) buf = _toHex(buf, x >> 4);
x &= 15;
*buf = (x<10 ? '0'+x : 'A'+x-10);
return buf+1;
}
char *toHex1(char *buf, unsigned int x){
*_toHex(buf, x) = '\0';
return buf;
}
char *toHex2(unsigned int x){
static char buf[9];
return toHex1(buf, x);
}
unsigned int toInt(const char *buf){
unsigned int x = 0;
for(; *buf; buf++) x = x*10 + *buf - '0';
return x;
}
int main(int argc, char *argv[]){
return 1<argc ? puts(toHex2(toInt(argv[1]))) : puts("give me a number.");
}
一度整数型にしてるという卑怯さ加減の凄さはもはや芸術的(;´ー`)
toHex2 はスレッドセーフですらないっ
0053デフォルトの名無しさん
NGNGmainが一番気に入った。他のコードはちょっと・・・
005452
NGNG0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNGバッファは呼び出し元で確保させとけ、みたいな。
それだけでスレッドセーフって感じ?
0057デフォルトの名無しさん
NGNGfor(;s>0;s/=16)*d++=s%16+(s%16<10?48:55);*d='\0';
}
左右逆だしマイナス未対応だし。
誰かなんとかしる。
0058ビル・ジョブス
NGNG0059デフォルトの名無しさん
NGNG0060ビル・ジョブス
NGNGそしてオーバーフローなんかを考えたらsscanf()、sprintf()のほうが
トータルコストが低いと思われ。まず仕様を規定したら。
0061
NGNG「10進数字を16進数字に変える」しか正しい問題は無いよな?
内部で10進で持ってるとか思ってそうな>>1だな。
0062デフォルトの名無しさん
NGNGなんかほっとするというかさ。
クロスワードとかナンクロとか好きな奴の気持ちが
理解できる瞬間だったりするよな。
0063デフォルトの名無しさん
NGNG0064デフォルトの名無しさん
NGNGvoid UInt2Hex(unsigned u,char *p,int c)
{for(*(p+=c)='\0';c--;u>>=4)*--p="0123456789ABCDEF"[u&0xF];}
unsigned Dec2UInt(char *p)
{unsigned u=0;while(*p!='\0')u=u*10+*p++-'0';return u;}
void Dec2Hex(char *d,char *h,int c)
{UInt2Hex(Dec2UInt(d),h,c);}
0065たった3ステップの技法
NGNG2.「0」を消す。
3.代わりに「6」を挿入。以上。
※全角の6なので注意されたい
006665
NGNG0067デフォルトの名無しさん
NGNGこれを16進表記の文字列に変換したときに何桁になるかを
あらかじめ知りたいときは どう計算すれば桁数出てくるのかな?
昔トリッキースレで最上位に立ってるビットの位置を調べるとかいう
技があった記憶があるけどそれの応用でいけるかな?
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNG整数だけで済ましたいっつーかさ。
0071とにかく即答・失敗
NGNG効率的にやるなら、整数でバイナリ検索が一番効率的だと思う
if (a>=(16<<4)) {
if (a>=(16<<6)) {
・・・みたいに8分割して
0072とにかく即答・失敗
NGNGhttp://pc.2ch.net/tech/kako/1003/10035/1003559977.html
function iLog2(m:integer):integer; //m=2^n を与えて nを返す
begin
if m>=$10000 then Result:=iLog2(m shr 16)+16
else if m>=$100 then Result:=iLog2(m shr 8)+8
else if m>=$10 then Result:=iLog2(m shr 4)+4
else if m>=4 then Result:=iLog2(m shr 2)+2
else if m>=2 then Result:=iLog2(m shr 1)+1
else Result:=0; //1か0 0ならエラーだけど知らない
end;
これを 調整すればいいんでない?
0073デフォルトの名無しさん
NGNGint log16(unsigned int a){
return a<0x10?1:a<0x100?2:a<0x1000?3:4;
}
4桁分までしか書いてないけどこれを8桁分まで書けばいいか。
0074デフォルトの名無しさん
NGNG0075デフォルトの名無しさん
NGNG0の場合のみ例外として、1桁プラス。
0076デフォルトの名無しさん
NGNGその場合8回の比較が必要になる バイナリ検索にすれば半分に減らせる
けど、予測分岐されるCPUなら>>75 が正解かな
0077デフォルトの名無しさん
NGNGバイナリ検索でも8回いるんじゃない?
007876
NGNGバイナリ検索なら常に3回だから 速いとも言えないかも
a>=(16<<4)?
(
a>=(16<<6)?
(
a>=(16<<7)? (8):(7)
):(
a>=(16<<5)? (6):(5)
)
):(
a>=(16<<2)?
(
a>=(16<<3)? (4):(3)
):(
a>=(16<<1)? (2):(1)
)
)
0079デフォルトの名無しさん
NGNG二回目 16±8
三回目 16±8±4
で比較3回か。
0080デフォルトの名無しさん
NGNGおれの勘違いかも知れんけど、そのコード変じゃない?
16進にしたときの桁数ってそれじゃ求まらんような。
シフト数が変じゃない?
0081デフォルトの名無しさん
NGNG>2はわかるとしても
>3 日本デーも三国志...三国志が日本? ハア?
>4 3つでーも四国....四国が3つ? 何が?
>5 4人でーも後藤マキ..後藤マキが4人?
全然できてないじゃん
>7 1本目と8本目の間を数え忘れてる
0082とにかく即答・失敗
NGNGfunction HexLength(a:Cardinal):Integer;
begin
a := a or 1;
a := a or (a shr 16);
a := a or (a shr 8);
a := a or (a shr 4);
a := a or (a shr 2);
a := (a or (a shr 1)) and $11111111;
a := a+(a shr 16);
a := a+(a shr 8);
a := a+(a shr 4);
Result:=( a and $f);
end;
008478
NGNGint HexLength(unsigned a)
{
a = a | 1;
a = a | (a >> 16);
a = a | (a >> 8);
a = a | (a >> 4);
a = a | (a >> 2);
a =(a | (a >> 1)) & 0x11111111;
a = a + (a >> 16);
a = a + (a >> 8);
a = a + (a >> 4);
return a & 0xf;
}
誰か検証してみて
0085とにかく即答・失敗
NGNGbegin
Randomize;
for i:=0 to 1000000 do begin
a:= Random(High(Cardinal));
n1:=HexLength(a);
n2:=Length(Format('%x',[a]) );
if n1<>n2 then begin
writeln(Format('%8X : %d %d',[a,n1,n2]));
end;
end;
end;
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNGint i = htoi("0xFF");
俺の環境だけです、他人は知りません。
0090デフォルトの名無しさん
NGNGちょっとまった。その程度ならstrtolを使えば済む話だよね。
0091デフォルトの名無しさん
NGNG右手親指を基点として、
折った指を1としたとき、
10進数で8を表現しようとすると
指が痛い。
■ このスレッドは過去ログ倉庫に格納されています