ページ 1 / 1
DrawFormatStringでLONGLONG型の表示
Posted: 2013年9月26日(木) 22:00
by YYSS
DxライブラリのDrawFormatString関数で、8バイトのLONGLONG型を使って、
兆や京単位の描画をしたいと思っているのですが、数値が20億以上になると負数になってしまいます。
20億付近で負の数になるということは、4バイトまでしか対応していないということなので、
DrawFormatStringで8バイト型を描画することは出来ないのでしょうか?
4バイトを2つ用意して、1つ目の数値がオーバーフローしたら2つ目を加算する等の処理をするしかないのでしょうか?
~開発環境~
Windows 7 Ultimate SP1 64bit
Visual C++ 2010
DXライブラリ
Re: DrawFormatStringでLONGLONG型の表示
Posted: 2013年9月26日(木) 22:11
by みけCAT
一度sprintf関数で文字列に変換し、それをDrawString関数で描画するのではダメですか?
Re: DrawFormatStringでLONGLONG型の表示
Posted: 2013年9月26日(木) 22:11
by softya(ソフト屋)
書式が%I64dじゃないとか?
Re: DrawFormatStringでLONGLONG型の表示
Posted: 2013年9月26日(木) 22:17
by みけCAT
DXライブラリ Ver3.11で試したところ、%lld、%I64dともに対応しているようです。
コード:
#include "DxLib.h"
char Key[256];
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
SetDrawScreen( DX_SCREEN_BACK ); //裏画面に設定
long long a=123456789012345ll;
int clWhite=GetColor(255,255,255);
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
//ココに処理を書いていく
DrawFormatString(30,30,clWhite,"%d",a);
DrawFormatString(30,70,clWhite,"%lld",a);
DrawFormatString(30,110,clWhite,"%I64d",a);
ScreenFlip();//裏画面を表画面に反映
}
DxLib_End();
return 0;
}
オフトピック
double型も8バイト(のことが多そう)ですね…
Re: DrawFormatStringでLONGLONG型の表示
Posted: 2013年9月26日(木) 22:38
by YYSS
%I64dや%lldというフォーマット指定があることを知りませんでした・・・
%dや%ldでやってもうまくいきませんでしたが、
%I64dや%lldにしたら描画できました!
返答ありがとうございました!!