アプリ版:「スタンプのみでお礼する」機能のリリースについて

vb6です。
文字データをコード変換して送信したいのですが、

送信関数は既にあり、いじれません。こいつは送信データをstringで受け取ります。しかし不思議なことに送信データサイズの指定もあります。多分stringをchar配列のようなイメージで使っているんだと思います。

文字コード変換処理は変換前データをstringで受け取ります。
コード変換はSJISをEBCDIC派生の独自コードに変換するので
一旦byte配列に落として1バイトずつ表に従って変換します。

変換したら送信関数に渡したいのですがなにせstringでしか受け取ってくれません。
中身の解釈をせずmemcpy的なことをしたいと調べたらダイレクトキャストという方法を
見つけたのですがよくわかりません。

誰か教えてもらえませんでしょうか?

質問者からの補足コメント

  • vb6では単なる代入ができそうですね、
    コード変換してる関数はvb.netで作ってて、送信関数はvb6のdllで提供されています。
    最悪vb6で代入するためだけのラッパーを作ろうと思います。

    もしvb.net側でできる方法あればそちらの方が望ましいので引き続き宜しくお願いします。

      補足日時:2015/12/21 19:00
  • 試させて頂きました。
    stringbuilderに順調に1バイトづつバイナリデータを格納するんですが
    最後にtostringしたことろでバイナリ数値イメージのら列をで文字列化したものが出来上がってしまいました。
    残念。ご協力ありがとうございました。

    No.5の回答に寄せられた補足コメントです。 補足日時:2015/12/25 15:34
  • vb6での単なる代入もつぶさに検証してみたところやはり中身がなにがしか変換されてしまいました。
    やっぱりbyte配列で徹頭徹尾処理しないとダメなのか。。。

      補足日時:2015/12/25 15:37

A 回答 (5件)

GetEncodingが、System.Text名前空間だったので、


System.Text 名前空間から、エンコードなしのものが無いか探して
StringBuilder クラスを見つけました。
その中のメソッドにStringBuilder.Append(Byte)メソッドがあったのでこれで出来ないかと?

以下、出来る保証はありませんが・・・。

Dim bytes() As Byte = ' 変換前データを一旦byte配列に落とす
Dim sb As New System.Text.StringBuilder()
For Each value In bytes
 ' valueをEBCDIC派生の独自コードに変換する

 sb.Append(value)
Next

Dim str As String = sb.ToString();
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
凄い!早速試させて頂きます。
結果はまたご報告致します。

お礼日時:2015/12/22 15:25

実際に確認したわけではありませんが


No.2の2番目のURL先の表には、EBCDICが載っていますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ホントだ載ってます!
試してみましたがだめでした。プラットフォーム依存と
ありますから多分EBCDICコードセットをどこからか入手して
インストールすればできるとかですかね。
残念ながらターゲットにそれはできないんです。
ありがとうございます。

お礼日時:2015/12/21 19:08

SJIS指定ではなくて、EBCDIC指定ではないですか?


派生の独自コードということですので、上手くいくかわかりませんが……
    • good
    • 0
この回答へのお礼

stringもgetencodingも、というかシステムそのものがebcdicには非対応じゃないですか?getencodingの引数セットにebcdicってあります?

お礼日時:2015/12/21 18:55
    • good
    • 0
この回答へのお礼

ありがとうございます。
getencodingだとbyte配列の中身のデータを例えばShiftJISと指定したらShiftJISであるものと思い込んで処理するので、今回の様な特殊コードはShiftJIS表にないからと言って変な値に書き換えられてしまうんです。

お礼日時:2015/12/21 18:32

普通に代入すれば良いのではないでしょうか?


http://www016.upp.so-net.ne.jp/garger-studio/gam …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。
ただすみませんvb.netでした。嘘言ってごめんなさい。
vb.netだとだめでした。

お礼日時:2015/12/21 18:16

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

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