- PR -

[非 .net] VBAで機種依存文字のチェック

投稿者投稿内容
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-10 16:12
引用:

はにまるさんの書き込み (2004-02-10 15:58) より:
はにまるです。

引用:

Clusterさんより:
# すこし他のサイトも探してみましたが、3.の文字については、
# 「JISコード内なので問題ない」と言ってるサイトが多かったですね。
# 多分大丈夫なのかな?


あぅ!前のWindows-Unix間の接続テストで、序に試しとけばよかった...
今度試してみます、勝手にテストケースに盛り込んで...

引用:

NAL-6295さんより:

unsignedなデータをsignedな型で返しているが正解です。


お!「unsigned」「signed」って言う言葉知らなかった 
unsigned charは、正数でキャラクターコードを表現
signed char は、負数、正数両方を使ってキャラクターコードを表現

訂正ありがとうございます!




VBでは符号なしの変数を扱えませんから、こんな妙な問題になるのですかね?
Cとかでは普通に符号ありorなしの変数を使ってますから…
ちなみに、元々文字コードはunsignedデータとして扱いますよね?

Chr関数の方の突っ込みはありませんでしたが、こちらの引数はLong型ですね。
値は-32768 〜 65535 の範囲を取ります。
Asc関数の方の戻り値の型と違うので余計に混乱します。

※すみません・・・なぜかたまにログインに失敗してうまく送信できず、
何回も編集することに・・・

[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 16:23 ]

[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 16:27 ]

[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 16:29 ]
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-02-10 16:47
はにまるです。
引用:

りばぁさんより:

VBでは符号なしの変数を扱えませんから、こんな妙な問題になるのですかね?
Cとかでは普通に符号ありorなしの変数を使ってますから…


VBばっかりやっていると、符号概念が無く
単に、用意されているものを使っている状態なので
確かに、文字コードがマイナスで表示されると、ビックリしますね...

ちょっと路線が外れますが、
私は、Cは経験が無いのですが、
signed char って何に使うんですか?
インターネットで調べると基本は、unsigned charの様に見うけられましたが、、、

何方か御教え下さい。

りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-10 16:59
引用:

はにまるさんの書き込み (2004-02-10 16:47) より:
はにまるです。
引用:

りばぁさんより:

VBでは符号なしの変数を扱えませんから、こんな妙な問題になるのですかね?
Cとかでは普通に符号ありorなしの変数を使ってますから…


VBばっかりやっていると、符号概念が無く
単に、用意されているものを使っている状態なので
確かに、文字コードがマイナスで表示されると、ビックリしますね...

ちょっと路線が外れますが、
私は、Cは経験が無いのですが、
signed char って何に使うんですか?
インターネットで調べると基本は、unsigned charの様に見うけられましたが、、、

何方か御教え下さい。





ん、、かなり勘違いされてるような?
VBでは符号なしが扱えないので、変数はすべてsignedなはずです。
ですからVBでは文字コードがマイナスってのが普通に現れるわけです。
(プラスマイナスという言い方がおかしいかも、、通常、符号ありなし
ですよね?)
Cでは文字コードをunsignedデータとして扱いますから(べつにsignedでもいいですが。。)
純粋に文字コードを扱う場合などにunsigned charなどを使用するわけです。

signed charは符号ありですから、-128〜127の値をとり
unsigned charは符号なしなので、0〜255の値をとります。
↑当然、10進数で表現すればと言う話しで、、、
メモリ上では元々何進数かってのは関係ありませんから・・

※あ、ちなみに、符号ありなしはcharだけじゃなくて他の型にも使用しますよ。


[ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 17:10 ]
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-10 17:29
ども、ほむらです。
僕はC上がりなので10進数ってなじめません。
ASCIIコードとかも16進数で頭の中に入っています(笑
そういえば、10進数を扱った記憶がほとんどないな〜^^;;;
VBとかでも&Hxxって感じで16進数使っています
------
はにまる氏へ
signed charは構造体のステータスフラグとして使っていた程度ですね。
正/正常(拡張) 0/正常 負/異常(エラーコード)とか。。
そうすると、0x80とビット演算でエラーのあるなしがわかるし
メッセージとして表示してもエラーかな?見たいなことが予想できますから。。。

りばぁ氏へ
引用:

signed charは符号ありですから、-127〜128の値をとり
unsigned charは符号なしなので、0〜255の値をとります。
↑当然、10進数で表現すればと言う話しで、、、
メモリ上では元々何進数かってのは関係ありませんから・・


unsigned charはアドレスを扱うときとか面倒なのでよく使いますね。(遅いけど)
何進数かが関係ないというよりは符号という考え方自体が
関係ない(存在しない)かもしれませんね。
所詮は人(表示)の都合?

#表示以外にマイナスって意識したことなかったり。。。。

#文言修正ついでに追記
#あっオフセットのときはマイナス意識して使っています^^;;;;
#あとは、範囲制御とか

[ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-10 17:48 ]
りばぁ
大ベテラン
会議室デビュー日: 2003/11/26
投稿数: 130
お住まい・勤務地: 愛知県
投稿日時: 2004-02-10 17:46
引用:

りばぁ氏へ
引用:

signed charは符号ありですから、-127〜128の値をとり
unsigned charは符号なしなので、0〜255の値をとります。
↑当然、10進数で表現すればと言う話しで、、、
メモリ上では元々何進数かってのは関係ありませんから・・


unsigned charはアドレスを扱うときとか面倒なのでよく使いますね。(遅いけど)
何進数かが関係ないというよりは符号という考え方自体が
関係ない(存在しない)かもしれませんね。
所詮は人(表示)の都合?

#表示以外にマイナスって意識したことなかったり。。。。



うわぁ。signed charのとる値の範囲間違えてたのでこっそり編集したのに、
編集前に引用されてたようで、間違ったのがバレちゃうぅ
と、自己申告しておきます・・・

ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2004-02-10 17:58
ほむらです。
-----------
りばぁ氏へ
>うわぁ。signed charのとる値の範囲間違えてたのでこっそり編集したのに、
あっ、気が付かずに流してしまいました〜^^;;;

そっか。よく考えたら2の補数なのだから'−'は偶数で終わらないといけないんですよね^^;;
この辺の範囲って覚えにくい><
はにまる
ぬし
会議室デビュー日: 2003/12/19
投稿数: 969
お住まい・勤務地: 誤字脱字の国
投稿日時: 2004-02-10 18:12
はにまるです。

 ワザと返答順序を変えています。

引用:

ほむらさんより:
C上がりなので10進数はなじめません。
ASCIIコードとかも16進数で頭の中に入っています(笑


私は旧VB上がりなので、10進数が基本、16進数は無理...
逆ですね!

引用:

signed charは構造体のステータスフラグとして使っていた程度ですね。
正/正常(拡張) 0/正常 負/異常(エラーコード)とか。。
そうすると、0x80とビット演算でエラーのあるなしがわかるし
メッセージとして表示してもエラーかな?見たいなことが予想できますから。。。
               :
unsigned charはアドレスを扱うときとか面倒なのでよく使いますね。(遅いけど)


勉強になります。

りばぁさんへ>
ほむらさんの「C上がりなので10進数はなじめません。」がヒントになりました
そこで総合理解の為、VB技術者が陥りやすい罠を...

# 尚、ここでいっている「VB技術者」は、
# 「VB技術者の全員」と言う意味ではありません。

引用:

りばぁさんより:
VBでは符号なしが扱えないので、変数はすべてsignedなはずです。
ですからVBでは文字コードがマイナスってのが普通に現れるわけです。
(プラスマイナスという言い方がおかしいかも、、通常、符号ありなし
ですよね?)


VB技術者は、文字のイメージ自体が文字型変数に格納されていると勘違している事が多く
その為、VB技術者には、「Cの文字型」は不親切に思え、抵抗を感じます。

つまり、Cをされている人は、「文字コードがマイナスってのが普通に現れる」と
考えられるかもしれませんが、文字コードを並べると下記の様になり、

0,1,2‥126,127,-128,-127‥-2,-1 ←訂正しました

(127)の次が(−128)って!!!!!
「文字コード」を「数字感覚」で捉えている人には理解不能なお話です。

引用:

Cでは文字コードをunsignedデータとして扱いますから(べつにsignedでもいいですが。。)
純粋に文字コードを扱う場合などにunsigned charなどを使用するわけです。

signed charは符号ありですから、-127〜128の値をとり
unsigned charは符号なしなので、0〜255の値をとります。
↑当然、10進数で表現すればと言う話しで、、、
メモリ上では元々何進数かってのは関係ありませんから・・


VBは暗黙変換が定石(って言い切っちゃうとマズイかな?)です。
VB技術者は開発時に、10進数で物事を考え、
その上に、文字の「1」も数値の「1」も同一視されている事が多いです。

[追記]
 つまり、コメント的に記述されています。
 「↑当然、10進数で表現すればと言う話しで、、、」が、
 VB上がり技術者の基本的考えですので、
 理解し難い、signed char は何に利用するのかな?と素朴に疑問に沸くのです。
[/追記]

VB技術者が意味不明な事を言った場合には、
この辺りを意識して頂けると、話がスムーズになると思います。

# 編集-修正
 じゃん♪さんご指摘の内容を訂正致しました。
# 編集-追記
 最後が意味不明なので追記
# 編集-修正
 NAL-6295さんご指摘の内容を訂正致しました。ん...訂正が多い ^^;


[ メッセージ編集済み 編集者: はにまる 編集日時 2004-02-10 22:00 ]
ぢゃん♪
大ベテラン
会議室デビュー日: 2003/06/12
投稿数: 208
お住まい・勤務地: 都内
投稿日時: 2004-02-10 18:31
0,1,2‥126,127,-128,-127‥-2,-1
だったりします。
unsignedな(128) == signedな(-128) == &H80 == 0x80
unsignedな(129) == signedな(-127) == &H81 == 0x81
   :
   :
unsignedな(255) == signedな(-1) == &HFF == 0xFF

#(-1)の全bitがONだから, .NET以前のVB(さらに先祖のBASIC)では論理演算の"真"が(-1)に相当してたり…

[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-02-10 18:31 ]

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