DxライブラリのDrawFormatString関数で、8バイトのLONGLONG型を使って、
兆や京単位の描画をしたいと思っているのですが、数値が20億以上になると負数になってしまいます。
20億付近で負の数になるということは、4バイトまでしか対応していないということなので、
DrawFormatStringで8バイト型を描画することは出来ないのでしょうか?
4バイトを2つ用意して、1つ目の数値がオーバーフローしたら2つ目を加算する等の処理をするしかないのでしょうか?
~開発環境~
Windows 7 Ultimate SP1 64bit
Visual C++ 2010
DXライブラリ
DrawFormatStringでLONGLONG型の表示
Re: DrawFormatStringでLONGLONG型の表示
一度sprintf関数で文字列に変換し、それをDrawString関数で描画するのではダメですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: DrawFormatStringでLONGLONG型の表示
書式が%I64dじゃないとか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: DrawFormatStringでLONGLONG型の表示
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で殴ればいい!(死亡フラグ)
Re: DrawFormatStringでLONGLONG型の表示
%I64dや%lldというフォーマット指定があることを知りませんでした・・・
%dや%ldでやってもうまくいきませんでしたが、
%I64dや%lldにしたら描画できました!
返答ありがとうございました!!
%dや%ldでやってもうまくいきませんでしたが、
%I64dや%lldにしたら描画できました!
返答ありがとうございました!!