DrawFormatStringでLONGLONG型の表示

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

DrawFormatStringでLONGLONG型の表示

#1

投稿記事 by YYSS » 7年前

DxライブラリのDrawFormatString関数で、8バイトのLONGLONG型を使って、
兆や京単位の描画をしたいと思っているのですが、数値が20億以上になると負数になってしまいます。

20億付近で負の数になるということは、4バイトまでしか対応していないということなので、
DrawFormatStringで8バイト型を描画することは出来ないのでしょうか?

4バイトを2つ用意して、1つ目の数値がオーバーフローしたら2つ目を加算する等の処理をするしかないのでしょうか?

~開発環境~
 Windows 7 Ultimate SP1 64bit
 Visual C++ 2010
 DXライブラリ

アバター
みけCAT
記事: 6309
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: DrawFormatStringでLONGLONG型の表示

#2

投稿記事 by みけCAT » 7年前

一度sprintf関数で文字列に変換し、それをDrawString関数で描画するのではダメですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 10年前
住所: 東海地方
連絡を取る:

Re: DrawFormatStringでLONGLONG型の表示

#3

投稿記事 by softya(ソフト屋) » 7年前

書式が%I64dじゃないとか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6309
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: DrawFormatStringでLONGLONG型の表示

#4

投稿記事 by みけCAT » 7年前

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バイト(のことが多そう)ですね…
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
YYSS
記事: 125
登録日時: 9年前
連絡を取る:

Re: DrawFormatStringでLONGLONG型の表示

#5

投稿記事 by YYSS » 7年前

%I64dや%lldというフォーマット指定があることを知りませんでした・・・

%dや%ldでやってもうまくいきませんでしたが、
%I64dや%lldにしたら描画できました!

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

閉鎖

“C言語何でも質問掲示板” へ戻る