BYTE を string に変換

[戻る]
たら 2002/12/26(木) 05:28:23
こんにちは、

この前、string をLPCTSTRにコンバートの仕方を教えていただいたばっかりなのですが、
また同じような壁にぶつかってしまいました。

BYTEをstringに変換したいのです… MSDN、GOOGLEでキーワードサーチをしても、
見つからないんですよ。簡単すぎるのでしょうか?でも本にも載っていないんですよね。

よろしく御願いします。

6:29 2002/12/26(木) 06:32:47
詳しく説明できないですけど    
   
  BYTE C='A';
  cout<<C<<endl;
  basic_string<BYTE> str(&C);
  cout<<str[0]<<endl;

これでよいかと

επιστημη 2002/12/26(木) 08:58:45
> basic_string<BYTE> str(&C);

危険な香りがします。 '\0'で終端されていませんから。

// VC6では これでいけた。
#include <iostream>
#include <string>

typedef unsigned char BYTE;

int main() {
  BYTE byte = 'C';
  std::string str(1,byte); // これこれ
  std::cout << '[' << str << ']' << std::endl;
  return 0;
}

επιστημη 2002/12/26(木) 09:00:28
> BYTEをstringに変換したいのです… MSDN、GOOGLEでキーワードサーチをしても、
> 見つからないんですよ。簡単すぎるのでしょうか?でも本にも載っていないんですよね。

char -> string なら本に載っているはずです。
# 本にもよるかな...?

επιστημη 2002/12/26(木) 09:20:37
> std::string str(1,byte); // これこれ

// これでもよさげ
std::string str; str = byte;

6:29 2002/12/26(木) 11:36:14
あーーなるほど
基本を忘れてましたね
でも、stringじゃいろいろと厄介なような気がするのは
わたしだけですかね。
そこでもうひとつ違う方法で考えたんですけど    
  BYTE s[8]={'S','T','R','I','N','G','\0','\n'};
  vector<BYTE> VStr(s,s+8);

  for(int i=0;i!=VStr.size();++i)
       cout.put(VStr[i];  
こちらの方が個人的にすきです。

επιστημη 2002/12/26(木) 13:13:29
> でも、stringじゃいろいろと厄介なような気がするのは

どこいらへんがですか? 文字の型がBYTEじゃないから?

#include <string>
#include <algorithm>
#include <iterator>

typedef unsigned char BYTE;

int main() {
  std::basic_string<BYTE> str = reinterpret_cast<BYTE*>("STRING");
  std::copy(str.begin(), str.end(), std::ostream_iterator<char>(std::cout));
  return 0;
}

たら 2002/12/26(木) 18:23:01
επιστημηさん、6:29さん、色々とありがとうございます。

ループでまわして、一つずつ手に入れていくやり方で逃げれることはわかったのですが、
何か気に食わないんですよね…

bt.toString();
str.getByte(); ←こんなC#みたいなものはないのでしょうか?

持っている本はC,C++の基本であって、まったくWINDOWS操作には触れてないんです。

一応こんな感じのメソードを作るのに使うのですが…
//------------------------------------------------------------------
bool Reg::GetValue(string valueName,string& value)
{
    DWORD valueSize;    //-- size of value
    BYTE bValue[256];

    RegQueryValueEx(Reg::currentKey ,valueName.c_str
(),NULL,NULL,NULL,&valueSize);    //-- get size of value
    //-- API:RegQueryValueEx
    if(RegQueryValueEx(Reg::currentKey ,valueName.c_str
(),NULL,NULL,&bValue[0],&valueSize)==ERROR_SUCCESS){\

        for(int i=0;i<valueSize;i++){
            value += bValue[i];
        }

        return true;    //-- Has a data.
    }else{
        return false;    //-- Has no data.
    }
}
//----------------------------------------------------------------

επιστημη 2002/12/26(木) 18:33:24
value.assign((const char*)bValue, valueSize);

たら 2002/12/26(木) 19:59:25
[[解決]]
επιστημηさん、ありがとうございます。
おかげさまで、後はレジストリー消去で終了です。

6:29 2002/12/27(金) 23:53:25
ちょっと遅いかもしれないですけど
επιστημη さん
> std::basic_string<BYTE> str = reinterpret_cast<BYTE*>("STRING");
ここが思い浮かばなかったです。→~~~~~~~~~~~~~~~~~~~~~~~~
ありがとうございました。
     

古いスレッドには追加発言できません。