リストコントロールにchar型の変数の値を数値として表示させたいのですが、charからLPTSTRへの洗練された変換方法がよくわからないです。

char tempChar;
CString tempString;
tempString.Format("%s", tempChar);
LPTSTR lpsz = new TCHAR[tempString.GetLength()+1];
_tcscpy(lpsz, tempString);

こんなプログラムを考えてみたのですが、汚いような気がします。もっと簡単で洗練された変換方法はないのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (2件)

wsprintfを使ってはどうでしょうか?



char tmpChar = 100;//表示する数値
TCHAR buf[5];
wsprintf(buf, "%d", tempChar);
    • good
    • 3
この回答へのお礼

ありがとうございます。この方法で解決しました。

お礼日時:2004/06/27 22:54

TCHAR は環境によって char/wchar_t を切り替える型であり、wchar_t そのものではないことをまずお断りしておきます。



変換には A2T マクロを使うと良いでしょう。

char* sz = "xxx";
LPTSTR wz = A2T(sz);

バッファの解放とかも必要ありません。
    • good
    • 1

このQ&Aに関連する人気のQ&A

方法 変換」に関するQ&A: m3→tへの変換方法

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QLPレコードをCDにダビングしたいのですが・・・

40年以上前の古いLPレコードがたくさんあります。レコードプレーヤーが故障して久しくLPレコードを聴いていません。
この先LPレコードをCDにダビングして残しておこうと思います。
そこでLPレコードをCDにダビングしてくれるサービスを行なっている業者を探しています。どのような業者が行なっているか教えていただけませんか?ホームページかメールアドレスを教えていただければありがたいのですが・・・。出来れば名古屋市内でそのような業者をご存じないですか?

Aベストアンサー

 こちらでやってくれます。郵送にも対応していますよ。

http://domefactory.cool.ne.jp/~lp_to_cd/

Qchar c = 'a'; char h[1] = c; エラー

char型のものを char[]型に代入したいです。

char c = 'a';
char h[1] = c;

として、

h[0] は \x97
h[1] は \x00

にしたいです。
型変換の方法を教えてください。

Aベストアンサー

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数を確保します。
後半で、その中を初期化しています。
添え字は 0 からはじまるので、この場合、h[0] に c の内容が代入されます。
1個しか場所を確保していないので、 h[1] の位置のデータは内容が不定です。
文字列として h を扱いたいのであれば、 C の文字列には終端として 0 が必要ですから、
char c = 'a';
char h[2] = { c, '\0'};

のような書き方が必要になります。
これで、お望みのデータになると思います。

とりあえず、確認を。

C では、'a'の表す値は 0x61 = 97 であって、 \x97 ではないと思います。
(\xnnn を、十六進数の意味に取りましたが、あってますでしょうか?
この場合、C では通常 0xnnn のように書くと思います。)
ので、 これは 0x61 のことをおっしゃっていると仮定します。

> char h[1] = c;
っと、これではたぶんコンパイルが通りません。

char h[1] = {c};

のように、配列であることを明示して代入してください。
この式では、前半でh という名前の、*長さ1 の* char の配列変数...続きを読む

Q皆さんの家にある、カセットテープやLPレコード、VHSテープ・・・どうしますか?

カセットテープもLPレコードもVHSテープも、時代の隅に追いやられようとしています。
最近はLP復権と言いますが、でも時代はデジタル・・・

さて、皆さんの家にあるカセットテープやLPレコード、VHSテープ
これから先、どうする予定ですか?

Aベストアンサー

LPレコードは、けっこうあります、未だにオーディオセットがあるので、時々は聞いていますし、気に入っているのはPCで録音、CDR化しています。
もし、今のオーディが壊れても、絶対にレコード再生の環境は確保するつもりです。
カセットもけっこうありますので同じです。
ヒマをみて少しづつCDR化してます。
VHSは、特に残したいものだけPCで録画、DVDR化していますが、画質が悪いので、わざわざ面倒してもな~という気もしてます。
ミニDVテープのビデオカメラのテープもけっこうあります。
これは豆にDVD化しています、子供の成長記録なんで・・

VHSデッキは、我が家はまだまだ現役で活躍しています。
当然これは、この先はデジタルレコーダー購入で(未だに未購入)、やはり、残したいものだけダビングしてデジタル化すると思います。

大昔に親父が使っていたベータ式ビデオカメラのテープが2本見つかり、当然ながらデッキもなく、持ってる知り合いもいないので、仕方が無く、ネットのダビングサービスでDVDR化してもらったことがあります(1枚¥1000でした)
見てみたら、¥1000がもったいないような内容でしたが、貴重なものには間違いないものでした。

使い古しのVHSテープがたくさんあります。
とりあえず、捨てないでありますが(幸い、大容量の地下室があるので)2度と見ることもないとも思います。
どうしようか、考えていません、このままかな・・・
VHSデッキを捨てる時に考えます。

LPレコードは、けっこうあります、未だにオーディオセットがあるので、時々は聞いていますし、気に入っているのはPCで録音、CDR化しています。
もし、今のオーディが壊れても、絶対にレコード再生の環境は確保するつもりです。
カセットもけっこうありますので同じです。
ヒマをみて少しづつCDR化してます。
VHSは、特に残したいものだけPCで録画、DVDR化していますが、画質が悪いので、わざわざ面倒してもな~という気もしてます。
ミニDVテープのビデオカメラのテープもけっこうあります。
これは豆にDVD...続きを読む

Qchar *str; と char* str;

char *str; と char* str;
どっちも同じことを意味しているんですか?

Aベストアンサー

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染むのでしょう。ちなみにそういう風な人たちは

char *str1, *str2;

とは、書けない体になっています。

char* str1;
char* str2;


変数の宣言だと、C に慣れていれば、char* str というのはちょっと違和感があるのは
私も分かりますが、関数のプロトタイプ宣言だと、どちらの方がすっきりしますか?

extern char *memcpy(char *, const char *);

extern char* memcpy(char*, const char*);


# まあ、どっちが正しい、っていうんじゃ無いんですよね

同じことを指している、というのは、先の回答の通りです。

また、ひとつの宣言で変数を複数宣言したときに、char* str という表記は間違い
易いじゃないか、ということが言われているのも事実です。実際、いろいろな C のソースを
見ていても、まずアスタリスクを型につけて書くのは、まずお目にかかれません。

ただ C++ では、char* str という宣言も良く使われています。

C++ に限らずオブジェクト指向の言語は、強く型を意識するので、「文字のポインタ型」と
いう意味で、まとめて書く方が馴染む...続きを読む

QLPレコードの処分方法

LPレコードの処分方法
ただ捨てるのにはもったいないのでどこか売れるところはないでしょうか。LPレコード150枚ほど。クラシック音楽が多い。

Aベストアンサー

思い出のある曲もあるでしょうからPCにダビングしてから買い取ってもらいましょう。
また、シリーズものはLPレコードとはいえ、プレミアがつくものもあるかもしれません。調べてからオークションに出品してみたらよい。
PCに取り込む方法は、わかりません。

QCStringからchar*への型変換について教えてください。

以前の質問に

int型 → CString型/char型

がありましたが、

CString型をchar*型に変換する方法を
教えていただければありがたいです。

MSDNで「LPCTSTRキャスト」が説明されていましたが、
例が載ってないのでよくわかりませんでした。

よろしくお願いします。

Aベストアンサー

目的にもよりますが一時的にchar配列として使いたいならCString::GetBuffer()が利用できます。
char配列としての利用が終わったらCString::ReleaseBuffer()する必要がありますが。

直接CString内の文字列を扱う必要があるならCString::operator LPCTSTRで文字列ポインタが得られます。
ただし、CStringオブジェクトをいじると無効ポインタなる可能性があるので気をつけてください。

MSDNのMicrosoft Foundation Classリファレンス→CString→クラスメンバで確認してください。

QLPレコードのCD化

保有しているLPレコードをCDに焼きなおしてくれたり、MP3などのデジタルデータ化してくれるサービスはないでしょうか。
若いころに買い揃えたLPレコードをCDなどにしてまた楽しみたいのです。

Aベストアンサー

こんなサイトはいかがです?

http://www.cosmonet.org/camera/audio/

QCstring(日本語含む)をcharに変換したいのですが

日本語を含む文字列が格納されたCstringをcharに変換したく
以下のプログラムを作成しましたがwcstombs_s() でエラーに
なってしまいます。(戻り値が EILSEQ)
どうしたらいいか、アドバイスをいただけないでしょうか?

CString csPass("Testテスト");
char cName[512];
size_t sz = 0;
errno_t err;

err= wcstombs_s(&sz, cName, sizeof(cName), csPass.GetString(), _TRUNCATE);
if(0 != err){
return;
}

【環境】
WindowsXP
VC++2008

Aベストアンサー

CStringクラスが使えるならCStringAクラスを介してchar型配列に入れてみては。

CString csPass(_T("Testテスト"));
char cName[512];
strcpy_s(cName, CStringA(csPass));

UnicodeにあってCP932(Shift_JIS)にない文字はおかしくなりますけど。
(wchar_t→char変換ということである以上回避しようがない。)

QLPレコードをHDDに

手持ちのLPレコードをCDに焼き付けて、レコードを捨ててしまいたいと思い、
またそう思っておられる方は他にもおられるようで、そのような質問はここでも何件か見られます。
しかし、最近のオーディオの技術的進歩はめざましく、HDD付きのステレオが現れました。
そこでレコードをCDに焼くのではなく、HDDにコピーしてしまおうと思うのですが、
LPレコード1枚をHDDに移した場合、容量はどのぐらい必要なのでしょうか?
それによって、HDDにいれられる枚数がわかると思うのですが。

Aベストアンサー

ざっくりの目安として捕らえてください。

CDと同程度の音質であれば、LP1枚当たり500~700MB程度。
MP3である程度ちゃんとした音質であれば30~50MB程度。
LPの録音時間に依存します。

QCString Format にて全角空白文字連続して格納する方法は?

CString のメンバ関数Formatにて全角空白文字を連続して
入れる方法がありましたら教えてください。
GetBufferでアドレスを取得してmemset等で複数格納する事は
可能なのですが、できればFormatをしようしてスマートに
格納したいです。。。
ちなみに半角空白は下記で格納可能でした。

CString s;
s.Format("%-36d", " ");

左詰めで半角空白が36バイト入ります。
この要領で全角空白を複数格納したいです。
引数の指定の方法等わかりましたら、教えてください。
よろしくおねがいします。

Aベストアンサー

そのような関数を自作すれば、以後はスマートに使えますよ。

全てを既存ライブラリに頼るのではなく、自分の都合にあった
部品(関数)を自作することも重要かと思います。
例えば、こんな仕様で作っておくのはいかが?

CString repeatString(int count, const char * string = NULL)
{
if (count <= 0) return "";
if (string == NULL) {
string = " ";
}
// 以下、戻すべき文字列を作る処理
// CString returnString;
// ...
// return returnString;
}
// 質問の例なら、CString s = repeatString(36);
// CString s = repeatString(3, "Go");なら"GoGoGo"に


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報