byte型をstring型として扱うには
- Windows2000-SP4/VB6-SP5環境で、ユニコードのデータをVBで直接入出力し、VB内でstring型で扱いたい場合、byte型で受け取り、APIの「MoveMemory」(または「RtlMoveMemory」)でstring型に変換する方法を教えてください。
- VBの入出力では自動的にsjis/unicode変換がされるので、binaryで受け取り、string型にすることを考えていますが、経験不足でうまくいきません。VBでbyte型とstring型の双方向のbinary変換の方法を教えてください。
- Windows2000-SP4/VB6-SP5環境でユニコードのデータをVBで直接入出力する際、byte型とstring型の双方向のbinary変換方法を教えてください。
- ベストアンサー
byte型をstring型として扱うには
今日の質問/マイページに反映されないので、再度の質問です。 windows2000-sp4/vb6-sp5環境です。ユニコードのデータをvbで直接入出力し、vb内でstring型で扱いたいとおもっています。今のところ、vbの入出力では、自動的にsjis/unicode変換がされるので、binaryで受け取り、string型にするのかなと思っています。byte型で受け取り、APIの"MoveMemory"("RtlMoveMemory")でstring型にcopyするのかなとは思っているのですが、うまくいきません。経験不足そのものです。vbでのbyte型とstring型双方向のbinaryな変換の方法をお教えください。
- zabutin1000
- お礼率100% (3/3)
- Visual Basic
- 回答数1
- ありがとう数2
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
dim s as string dim b() as byte '文字列 -> byte配列 b = s 'byte配列 -> 文字列 s = b
関連するQ&A
- javaでのshift_jis対応以外のunicodeの入出力
windows2000sp4 j2sdk1.4.2_05の環境です .netでは、直接unicodeでの入出力が行われるとか聞いているのですが、javaのFileInputReader/Writerで、encodingに、UTF-16 UTF-16LE UTF-8 等を指定して、入出力を行った時、どうも、s-jis対応外の文字は、"?"に変換されてしまうようで、FileInput/OutputStream を用い、バイナリで処理してみようとおもったのですが、byte型とString型(または、BufferString型)とのbinaryなデータのcopyがよく分かりません。何かご存知の方 お教え頂けないでしょうか
- ベストアンサー
- Java
- [VB.net] StringからByte配列への変換
皆さんこんばんは。 最近VB.NET2000でVisual Basicをはじめたのですが、どうにもString型の値をByte配列へ変換するやり方が分かりません。 VB6.0だとByte配列にStringを代入するだけでいいそうなのですが、.NETで代入しようとすると『型"String"の値を"Byteの1次元配列"に変換できません』というビルドエラーが表れてしまいます。 CByte( Mid(str,i,1) ) CLng( Mid(str,i,1) ) 他にも上記コードのように一つずつ変換しようと試みたのですが、String中のある文字がワイドバイトらしく、System.InvalidCastExceptionが表れてしまいます。 ("『"を上下反転したような文字) ワイドバイトのStringを1バイトずつ区切ってByte配列やLong配列へ格納する手法というものはありませんでしょうか。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- 固定長String?
固定長String(String * 8など)をメンバに持つユーザ定義のストラクチャーにサーバより受信したデータをメモリコピーを行います。 この固定長StringにSJISデータを設定した時に、末尾に†が詰められていることがあります。ASCIIデータでは普通にデータが入っています。SJISデータでおかしいので単純に漢字データでおかしくなったのかな?と思ったのですが、SJIS(漢字含みデータ)でも†が詰められる時と詰められない時があります。どういった時に†が詰められるのかご存知の方教えて下さい。 そもそも、VBのString型のコード体系ってどうなっているんですか?デフォルト設定時、内部UNICODEのwindows環境下でSJISでいいんでしたっけ? 一度に2つもすいません。
- 締切済み
- Visual Basic
- [VBScript][wsh]byte単位でのデータの切り出し
以前LenBに関して質問した者です。 今回は 「ある文字列の○byte目から△byte分取得する」という処理で困っています。 MidB関数を使うと思うのですが、Unicodeの為、 BASP21の.KconvでSJISに変換してあげています。 HOGEasc = objBasp.Kconv(MidB(tmpLine, ○, △),1) ここで問題となるのが、切り出した文字列が化けてしまうのです。 以下のようにもう一度Unicodeに変換してあげてもダメです。 HOGEuni = objBasp.Kconv(HOGEasc,4) いろいろ試してみましたが、お手上げ状態です。 このような処理はできないのでしょうか? どうぞよろしくお願いいたします。
- ベストアンサー
- Visual Basic
- APIについて
文字列をsjisからjisに変換して、 byte型に格納しているのですが dim data() as byte data()をapi関数に渡しているのですが、 apiに渡すときに、apiでの定義は bdata as byte となっていて、バッファを送信するとあります。 この場合、渡す方法としては、data()の配列数分のloopを 行い、1つずつ渡していく方法になるのでしょうか? よくわからない質問かも知れませんが、ご存知の方がいらっしゃいましたらよろしくお願いします。
- 締切済み
- Visual Basic
- テキストBOXから取得した文字コードの扱いについて
JSPで記述したページのテキストBOXに入力されたSJIS形式の日本語文字データをサーブレットに送信してそれを取得して、文字のエンコードを行う際に気がついたのですが String text = request.getParameter("text"); byte[] bytes =text.getBytes("ISO8859_1"); text=new String(bytes, "SJIS"); のようにすればサーブレットで扱う時に正しく日本語表示できるのですが String text = request.getParameter("text"); byte[] bytes =text.getBytes("SJIS"); text=new String(bytes, "SJIS"); とすると正しく表示されません。 text.getBytes("SJIS");で取得格納されるbyteのデータに違いがあるようです。この場合取得されるbyteの配列は3つになっています。 ISO8859_1で取得するとbyte配列は2つになっています。このISO8859_1のbyte配列のデータと同じ中身のものを単にString(byteデータ,文字コード)のコンストラクタに入れるとSJISの文字コードで正しく変換出来ています。 要するにもともとSJISの文字データをgetByte("SJIS")で変換したものがなんで、もとに戻せないのかということです。また、違う文字コードのISO8859_1ではSJISに対応したbyteの配列になるのかということです。 ひどい乱文ですみませんが、よろしくお願いします。
- 締切済み
- Java
- unicode <-> sjis 変換
UNICODEからSJISに変換するDLLをVC6.0で作成しました。 2層のswitch文で30000行(約400キロバイト)のソースファイルになりました。 コンパイル後も500キロバイトほどになります。 しかしvectorなどにおいてある変換ソフトをみると100キロバイトほど でした。そういったソフトはどのようにして変換しているのでしょうか? (APIかなにかを呼び出しているのでしょうか?) あるいはunicodeとsjisの漢字コードに数学的な相関関係があるのでしょうか?
- ベストアンサー
- C・C++・C#
- 画像のbyte[]データの読み込みついて
Javaのbyte[]の読み込みについて質問です。 外国産の外部APIのメッソドで次のようにあります。 public void transferImage(byte[] fileByteArray, java.lang.String ImageName,) Parameters: fileByteArray - byte array consisting of image data ImageName - name of the image 例)「test.jpg」という画像データを用意しまた。 ImageName="test.jpg"; と指定出来ました。 fileByteArray=null; としか値を入れれません。 質問) テキストファイルの出力なら一行単位で読み込めますが、画像の時はどのようにデータを取得すればいいのですか? nullの代わりに何を代入したらよいのか教えて下さい。
- ベストアンサー
- Java
- SJIS->UTF8->SJISコード変換について
Windows XPでVB.NET2010で文字コード変換のプログラムを下記のように作成しました。 Dim beforeStr As String = "変換前" Dim utfEnc = System.Text.Encoding.GetEncoding(65001) Dim sjisEnc = System.Text.Encoding.GetEncoding(932) Dim beforeBytes() As Byte = utfEnc.GetBytes(beforeStr) Dim afterBytes() As Byte = System.Text.Encoding.Convert(sjisEnc, utfEnc, beforeBytes) Dim afterStr As String = sjisEnc.GetString(afterBytes) TextBox3.Text = afterStr Dim reverseStr As String = afterStr Dim reverseBytes() As Byte = sjisEnc.GetBytes(reverseStr) Dim baseBytes() As Byte = System.Text.Encoding.Convert(utfEnc, sjisEnc, reverseBytes) TextBox4.Text = utfEnc.GetString(baseBytes) SJIS->UTF8に変換して、確認のためにUTF8->SJISに逆変換してみましたが、 「変換」までは正しいのですが、最後の「前」が文字化けしてしまします。 正しくSJIS-.UTF8->SJISするには、どのように修正すればよろしいでしょうか? よろしくお願いします。
- 締切済み
- Visual Basic
- VBのByte配列をVARIANTに格納してCOMでVCに渡したい
OS: WinXP sp2 開発: VB6 sp5 <--> VC6 sp5 MFC OCX いままでVB/VC間のデータのやりとりをStringで行っていたアプリがありまして、現在はVB側から見たインターフェースをByte()へ変更する作業を行っています。 まず VB --> VC に関して質問ですが Dim byteStream(5) As Byte byteStream(0) = 1 byteStream(1) = 2 byteStream(2) = 3 byteStream(3) = 4 byteStream(4) = 5 などとし、メソッドに対してbyteStreamをVariantで渡してやって C側から const VARIANT FAR& で参照してきて、 この.pcVal(配列の先頭アドレスが入っているはず)をchar*で受け取ろうと思いました。 するとこのアドレスには、先頭のbyteStream(0)の値しか入ってきません。 VB側でVariant = Byte()とするときに値渡しになっているっぽい?のですが、仕組みがわかりません。 この理由が知りたいです。 ODLファイルを変更して対処すべきかもしれませんが、MFCのウィザードが「慎重に行ってください。」とコメントしているので質問させていただきました。 VB側でのメソッドの宣言: Function SendVariantStream(stream, length As Integer) As Boolean odlファイルでの宣言: boolean SendVariantStream(VARIANT stream, short length) VCの宣言: BOOL SendVariantStream(const VARIANT FAR& stream, short length);
- ベストアンサー
- C・C++・C#
お礼
ありがとうございました
補足
todo36さん さっそくの回答どうもありがとうございます。 "="で型変換できるとは驚きです。 下記のテストをしてみました。 Private Sub Command1_Click() Dim byt1() As Byte Dim str1 As String Open "c:\data\in.csv" For Binary Access Read As #1 Open "c:\data\ou.csv" For Binary Access Write As #2 ReDim byt1(1) Get #1, , byt1 ReDim byt1(21) Get #1, , byt1 str1 = byt1 MsgBox ("< " & str1 & " >") ReDim byt1(1) byt1(0) = &HFF byt1(1) = &HFE Put #2, , byt1 ReDim byt1(21) byt1 = str1 Put #2, , byt1 Close #1 Close #2 End Sub sjis対応以外の文字もそのまま出力されることは確認しました BOMの2バイトを含め24バイトのファイルを入出力しました ただ、何が稚拙なのか、24バイトのあとに142バイトのゴミがついて出力されました。どこに問題があるのでしょうか。何か判りますでしょうか。