iniファイルの指定されたセクション内にあるキーから取得した値を編集して、レジスト
リキーに設定するソースを作成しており、編集した値を設定する文字列が合わず、ソース
が止まっております。
iniファイル
[xxxx]
abc=0x3f,0x8a,0x2e,0x64,0x01
ソース
CHAR temp[128];
CHAR abcdata[128];
BYTE vData[128];
//iniファイルから値取得
r = GetPrivateProfileString(sect, abc, ", temp, sizeof(temp), path);
if (r > 0) strcpy(abcdata, temp);
//バイナリデータ化にする
※ここで「vData[] = {0x3f,0x8a,0x2e,0x64,0x01};」のような形にするにはどのような
処理がありますのでしょうか?
//レジストリキーの値設定
r = RegSetValueEx(key, name, 0, REG_BINARY, (LPBYTE)vData,
sizeof(vData)/sizeof(vData[0]));
環境
XP, VC6.0
以上、ご教授よろしくお願い申し上げます。
文字列0x3f,0x8a,0x2e,0x64,0x01から、数値変換してBYTE配列にしたい。
ってコトですよね?
strtol()系を使用されては?
# ただし戻り値はlong型なので、その辺りにはご注意を。
http://msdn.microsoft.com/ja-jp/library/w4z2wdyc.aspx
こっちはVS2013のもの…ですけどね。
手元のVC6のリファレンスマニュアルでstrtol()について調べてみてくださいな。
# まぁ、検索すればそういう処理コードの例くらい見つかるでしょう。たぶん。
瀬戸っぷさん、ありがとうございます。
TCHAR *endp;
LONG value;
value = strtol(abcdata, &endp, 0);
に行い、結果が「63」になりましたが、繰返しが必要でしょうか?
初歩的ですみませんが、宜しくお願い申し上げます。
>に行い、結果が「63」になりましたが、繰返しが必要でしょうか?
それだと、頭の0x3fの部分しか変換できていません。
やや難しいですが、strtok()関数などを使用して、区切り文字(カンマ)で
分離しながらstrtol()で数値変換してはどうでしょう。
ちなみにstrtol()の「基数」はこの場合は16進数なので16を指定します。
仲澤さん、ありがとうございます。
While文で、strtolを処理して、繰返し終了後、memcpyで配列をコピー
しましたが、うまくいきませんでした。
サンプルソースを頂ければ、幸いです。
お手数ですが、宜しくお願い申し上げます。
strtolの2番目の引数を使えば、strtok使わなくてもいけるかな?
以下、てけとー
#include <cstdio>
#include <windows.h>
#include <tchar.h>
int main(void)
{
TCHAR abcdata[128] = _T(0x3f,0x8a,0x2e,0x64,0x01);
BYTE vData[128] = {0};
TCHAR* pStart = abcdata;
TCHAR* pEnd = NULL;
int i = 0;
while (true)
{
long l = _tcstol(pStart, &pEnd, 16);
vData[i] = (BYTE)l;
if (*pEnd == _T('\0')) {
break;
}
pStart = pEnd + 1; // 手抜き CharNextとか使ったほうがよさげ
++i;
}
for (int j = 0; j <= i; ++j) {
printf(0x%02x , vData[j]);
}
printf(\n);
return 0;
}
まぁこんな感じ、
char abcdata[ 32] = {0x3f,0x8a,0x2e,0x64,0x01};
char * pEnd;
char * context;
long Value[ 10];
long ValueCnt = 0;
char * strwork = strtok_s( abcdata, ,, &context);//abcdataは破壊される
while( NULL != strwork){
Value[ ValueCnt] = strtol( strwork, &pEnd, 16);
ValueCnt++;
strwork = strtok_s( NULL, ,, &context);//NULLを与えると次のトークンを戻す
}
蒼の洞窟さん、仲澤さん
サンプルソースを提供いただき、ありがとうございました。
助かりました。
以上、取り次ぎ、お礼とさせていただきます。