ページ 11

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にしたら描画できました!

返答ありがとうございました!!