- PR -

Byte配列のString変換

投稿者投稿内容
くんちん
常連さん
会議室デビュー日: 2002/10/07
投稿数: 46
投稿日時: 2003-03-20 13:01
皆様ありがとうございます。
今からなのですが、皆様の意見を話し合いしながら色々試そうと思います。
(Inputmanのバグ対応とか色々あって今、ごたごたしています。)
制御側の方とも色々話しながら決めていこうと思います。
その結果、どうなったか報告いたします。
ありがとうございました。
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-03-20 14:34
Jittaさん
引用:

数値/文字列をキチンと判別して使用できるようにする方が、利用する側の使い勝手がよいと思うのですが、いかがでしょうか。



これは、サーバとクライアント双方の間で、データの受け渡し形式を策定する際に考えるべきことです。Byte列で受け取れ、と決められてしまっているとしたら、解決法はありません。

今回の場合、サーバ側でデータ型(最低限、数値か文字列か)を渡してやるのがベストだと思いますが、サーバはC言語だということなので、Jittaさんの提示されたような方法は難しいですね。
くんちん
常連さん
会議室デビュー日: 2002/10/07
投稿数: 46
投稿日時: 2003-03-24 11:14
皆様ありがとうございます。
いろいろと試したのですが、実現は難しいようでした。
(やり方がまずいのかもしれませんが。。。。)
全てのデータをStringの固定長で受け取る事になりました。
StringだとOKでした。ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-03-25 12:03
こんにちは。

>>いろいろと試したのですが、実現は難しいようでした。
>>(やり方がまずいのかもしれませんが。。。。)

 やり方(実現方法)の問題ではなく、仕様の問題です。
 へげもんさんのおっしゃるように、『文字コードなのか数値なのかを見分ける方法はありません』。逆に、「あなたはどうやって見分けますか?」この答えがあるなら、その答えをプログラミングすればOKです。
 普通は、『「何バイト目から何バイト目は文字コード」としておく』か、データの前に「これからxバイトは{文字列|数値}である」という識別子を入れます。このように、出てくるものが容易に判別できないと利用できないのです。
(と、直接的に書くべきだったか…?)

 Susieプラグインに、ファイルハンドルかそこから読み込んだバッファへのポインタを渡す、という関数があります。あるいはこれをまねされたのかもしれませんが、これはまず「ポインタを格納するバイト数とファイルハンドルを格納するバイト数が同じ」という非常に危うい大前提の上でできることです。さらに、「上位ワードが0ならばファイルハンドル、そうでなければポインタ」と、これまた危うい見分け方をしています。1つのプロセスが同時に開くことのできるファイル数が65535個以下、静的/動的に確保されるメモリは0x10000以上のアドレスであるという制約があるので、こんなことができるのです。



 一郎さんの
>>0が入っているのにそこで終わりではないというのは、
>>どんな文字コードの文字列ですか?
ですが、不定長の文字列配列を送るとき、使うことがあります。
文字列1\0文字列2\0・・・文字列n\0\0
WindowsのShell APIは、こういう文字列へのポインタを希望しているものがあります。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2003-03-25 13:28
>WindowsのShell APIは、こういう文字列へのポインタを希望しているものがあります。
なるほど、そんなものがあるんですか。
それに後で気が付きましたが、UTF-16などは途中に0の値のバイトが含まれますね。

スキルアップ/キャリアアップ(JOB@IT)