ページ 1 / 1
バイトデータを文字列に・・
Posted: 2007年1月27日(土) 14:11
by wakaba
全くの初心者です
このフォーラムの記事をみて 自分自身のパスを 得る事ができましたが
戻ったデータを 文字列に格納する方法が 解りません
教えてください
ソース
Dim buf[MAX_PATH] As Byte
Function GetOneselfFileNameStr() As String
Dim length As Long
length=GetModuleFileName(NULL,buf,MAX_PATH)
GetOneselfFileNameStr=ZeroString(length)
memcpy(StrPtr(GetOneselfFileNameStr),buf,length)
End Function
GetOneselfFileNameStr()
MessageBox(0, buf, "パス名を含むファイル名", MB_OK)
とすると パス名を含むファイル名は 表示できました
しかし buf は バイトデータなので 文字列にする方法が
解りません
Re: バイトデータを文字列に・・
Posted: 2007年1月27日(土) 14:31
by 7
> とすると パス名を含むファイル名は 表示できました
> しかし buf は バイトデータなので 文字列にする方法が
> 解りません
用語が曖昧ですけど、文字列はバイトデータの集まりです。ですからなんの問題もありません。
ただちょっとwakabaさんが使い方を間違えているだけです。
コード: 全て選択
' 自分自身のファイルパスを取得
' ファイルパスを示すString型文字列が返る
Function GetOneselfFileNameStr() As String
Dim buf[MAX_PATH] As Byte
Dim length As Long
length=GetModuleFileName(NULL,buf,MAX_PATH)
GetOneselfFileNameStr=ZeroString(length)
memcpy(StrPtr(GetOneselfFileNameStr),buf,length)
End Function
' String型変数 buf の宣言
Dim buf As String
' GetOneselfFileNameStr関数の戻り値が buf に代入される
buf=GetOneselfFileNameStr()
' buf の中身(文字列)をメッセージボックスで表示
MessageBox(0, buf, "パス名を含むファイル名", MB_OK)
HSPやってましたでしょうか? 自分はHSPからActiveBasicに移って来た人間なんですけど、HSPのような仕様が普通だと思ってたので関数の戻り値に随分と悩まされました...。
変数に関数の戻り値を格納したい場合、
variable = functionという書式になります。
あと文字列に変換したいということですが、さっきも書いたようにバイトデータもちゃんとした文字(列)です。
どういったことをしてバイトデータを文字列ではないと思ったんでしょう?
たしかにバイトデータを見てみると数値の羅列でしかないのですが、それは文字コードであって、一応文字列なのです。
説明下手かも...。
Re: バイトデータを文字列に・・
Posted: 2007年1月27日(土) 14:59
by wakaba
ありがとう ございます
単純な誤りでした
> HSPやってましたでしょうか? 自分はHSPからActiveBasicに移って来た人間なんですけど、HSPのような仕様が普通だと思ってたので関数の戻り値に随分と悩まされました...。
少しだけ やってました
以前のバージョンなので 仕様が違ってました
デバグは ちょっと大変なので 移ってみました
> あと文字列に変換したいということですが、さっきも書いたようにバイトデータもちゃんとした文字(列)です。
> どういったことをしてバイトデータを文字列ではないと思ったんでしょう?
string型のものが 文字列だと思っていたので その後 inStr や left$などが
使えないと思っていたものですから・・・
Re: バイトデータを文字列に・・
Posted: 2007年1月27日(土) 15:48
by 7
> > あと文字列に変換したいということですが、さっきも書いたようにバイトデータもちゃんとした文字(列)です。
> > どういったことをしてバイトデータを文字列ではないと思ったんでしょう?
>
> string型のものが 文字列だと思っていたので その後 inStr や left$などが
> 使えないと思っていたものですから・・・
Σ( ̄□ ̄;)
そういえば
StrPtr関数というものの存在を忘れていました!
AB5 CP3だとString型の仕様が変わったので問題ないようですけど...?
[ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]コード: 全て選択
Dim byte[MAX_PATH] As Byte
Dim str As String
Dim i As Long
str.ZeroString(MAX_PATH)
For i=0 To 25
byte=65+i
str=65+i
Next
MessageBox(hMainWnd,byte,"Byte型のアルファベ",MB_OK)
MessageBox(hMainWnd,str,"String型のアルファベ",MB_OK)
MessageBox(hMainWnd,Str$(InStr(1,byte,"N")),"Byte型のNの位置",MB_OK)
MessageBox(hMainWnd,Str$(InStr(1,str,"N")),"String型のNの位置",MB_OK)
MessageBox(hMainWnd,Left$(byte,InStr(1,byte,"N")),"Byte型のNまで表示",MB_OK)
MessageBox(hMainWnd,Left$(str,InStr(1,str,"N")),"String型のNまで表示",MB_OK)
' AB5ではInStrの代わりに以下のように書くこともできます。
MessageBox(hMainWnd,Left$(str,str.IndexOf("N")+1),"String型のNまで表示",MB_OK)