DOBON.NET DOBON.NETプログラミング掲示板過去ログ

文字コードについて

環境/言語:[vb 2005 .Net FrameWork2.0 Compact Framework Win CE 5.0 ]
分類:[.NET]

お世話になります。

現在Vb 2005 Pro にてプロジェクト種類をWindous CE 5.0で
デバイスアプリケーションの作成を行っています。

Bluetooth対応プリンタとシリアル通信にて印刷を行なうのですが、

漢字を印刷する際に hex(asc("文"))のように16進数の文字列に変換して
渡す必要があるのですが、Vb6.0の場合と、vb 2005の場合で、値が違います。

Vb6.0のhex(asc("文"))=95B6
Vb2005のhex(asc("文"))=FFFF95B6

上記のようになります。
その為、VB2005 で印刷を行なった場合、文字の前にスペースがついてしまいます。
[文]
[ 文]※文字の前にスペースが入る

文字の前にスペースが入らないようにしたいのですが、
どのように変換したらいいのでしょうか?

お分かりの方教えていただけないでしょうか?
■No21857に返信(ケイさんの記事)
>
> Vb6.0のhex(asc("文"))=95B6
> Vb2005のhex(asc("文"))=FFFF95B6
>

AscW メソッドを使ってください。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28533&forum=7&2
■No21860に返信(やじゅさんの記事)
> AscW メソッドを使ってください。
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=28533&forum=7&2
返信ありがとうございます。

申し訳ありませんが、Ascwについて確認させていただいてよろしいでしょうか?

AscW は、入力文字に対する Unicode コード ポイントを返します。これは 0 〜 65535 で返されると思いますが、

これをどのようにして16進数表記にしたらいいのかが分からないのですが、
教えていただけませんでしょうか?
> これをどのようにして16進数表記にしたらいいのかが分からないのですが、
> 教えていただけませんでしょうか?
AscWじゃ同じ値になりませんね。
AscでShort型にキャストしてからHex通せば良いんじゃないんですか?

VB6と違ってInteger型は4バイトでそのままHexにかければ8桁のなるのは当然です。

Ascの戻り値が負であるため、FFFF95B6になる→2バイトで処理すれば良い
■No21865に返信(Azuleanさんの記事)
> AscWじゃ同じ値になりませんね。
> AscでShort型にキャストしてからHex通せば良いんじゃないんですか?
>

Hex(CShort(Asc("文"))) ですね。

AscWってなんだったんだろう? リンク先うのみにするのがよくなかったな
> AscWってなんだったんだろう? リンク先うのみにするのがよくなかったな
>

Ascは例外的にシフトJISを基準、AscWはUnicodeってことか
Azuleanさん、やじゅさん ありがとうございました。

Chortを使う事で無事取得する事ができました。

ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板