0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

32bit環境でsprintfやったらハマった件

Posted at

4年くらい前の話なので今どき起きないだろうな~とは思いつつも備忘のために。

ちなみに古いPerlプログラム(2001年頃の奴がマジでヤバい)を他の言語で作り直したいという話はちょいちょい来る。

32bitのWindows2003で起きて、64bitのWindows2008では起きなかったので、内部で int に変換してんのかな~、とか思ったり。

my $id = '2234567890';
my $idstr = sprintf('%10d', $id);
# => '2234567890' ではなく負の値になる

sprintf() がどういう仕組みなのかは知らない。
解決方法はこんな感じ。正直なところ、 sprintf のところを触らずになんとかできたら一番よかった。

my $idstr = substr('0000000000' . $id, -10);

開発当初はIDが少なかったから起きなかったんだろうね……

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?