- - PR -
[非 .net] VBAで機種依存文字のチェック
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-10 16:12
VBでは符号なしの変数を扱えませんから、こんな妙な問題になるのですかね? Cとかでは普通に符号ありorなしの変数を使ってますから… ちなみに、元々文字コードはunsignedデータとして扱いますよね? Chr関数の方の突っ込みはありませんでしたが、こちらの引数はLong型ですね。 値は-32768 〜 65535 の範囲を取ります。 Asc関数の方の戻り値の型と違うので余計に混乱します。 ※すみません・・・なぜかたまにログインに失敗してうまく送信できず、 何回も編集することに・・・ [ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 16:23 ] [ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 16:27 ] [ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 16:29 ] | ||||||||||||||||
|
投稿日時: 2004-02-10 16:47
はにまるです。
VBばっかりやっていると、符号概念が無く 単に、用意されているものを使っている状態なので 確かに、文字コードがマイナスで表示されると、ビックリしますね... ちょっと路線が外れますが、 私は、Cは経験が無いのですが、 signed char って何に使うんですか? インターネットで調べると基本は、unsigned charの様に見うけられましたが、、、 何方か御教え下さい。 | ||||||||||||||||
|
投稿日時: 2004-02-10 16:59
ん、、かなり勘違いされてるような? VBでは符号なしが扱えないので、変数はすべてsignedなはずです。 ですからVBでは文字コードがマイナスってのが普通に現れるわけです。 (プラスマイナスという言い方がおかしいかも、、通常、符号ありなし ですよね?) Cでは文字コードをunsignedデータとして扱いますから(べつにsignedでもいいですが。。) 純粋に文字コードを扱う場合などにunsigned charなどを使用するわけです。 signed charは符号ありですから、-128〜127の値をとり unsigned charは符号なしなので、0〜255の値をとります。 ↑当然、10進数で表現すればと言う話しで、、、 メモリ上では元々何進数かってのは関係ありませんから・・ ※あ、ちなみに、符号ありなしはcharだけじゃなくて他の型にも使用しますよ。 [ メッセージ編集済み 編集者: りばぁ 編集日時 2004-02-10 17:10 ] | ||||||||||||||||
|
投稿日時: 2004-02-10 17:29
ども、ほむらです。
僕はC上がりなので10進数ってなじめません。 ASCIIコードとかも16進数で頭の中に入っています(笑 そういえば、10進数を扱った記憶がほとんどないな〜^^;;; VBとかでも&Hxxって感じで16進数使っています ------ はにまる氏へ signed charは構造体のステータスフラグとして使っていた程度ですね。 正/正常(拡張) 0/正常 負/異常(エラーコード)とか。。 そうすると、0x80とビット演算でエラーのあるなしがわかるし メッセージとして表示してもエラーかな?見たいなことが予想できますから。。。 りばぁ氏へ
unsigned charはアドレスを扱うときとか面倒なのでよく使いますね。(遅いけど) 何進数かが関係ないというよりは符号という考え方自体が 関係ない(存在しない)かもしれませんね。 所詮は人(表示)の都合? #表示以外にマイナスって意識したことなかったり。。。。 #文言修正ついでに追記 #あっオフセットのときはマイナス意識して使っています^^;;;; #あとは、範囲制御とか [ メッセージ編集済み 編集者: ほむら 編集日時 2004-02-10 17:48 ] | ||||||||||||||||
|
投稿日時: 2004-02-10 17:46
うわぁ。signed charのとる値の範囲間違えてたのでこっそり編集したのに、 編集前に引用されてたようで、間違ったのがバレちゃうぅ と、自己申告しておきます・・・ | ||||||||||||||||
|
投稿日時: 2004-02-10 17:58
ほむらです。
----------- りばぁ氏へ >うわぁ。signed charのとる値の範囲間違えてたのでこっそり編集したのに、 あっ、気が付かずに流してしまいました〜^^;;; そっか。よく考えたら2の補数なのだから'−'は偶数で終わらないといけないんですよね^^;; この辺の範囲って覚えにくい>< | ||||||||||||||||
|
投稿日時: 2004-02-10 18:12
はにまるです。
ワザと返答順序を変えています。
私は旧VB上がりなので、10進数が基本、16進数は無理... 逆ですね!
勉強になります。 りばぁさんへ> ほむらさんの「C上がりなので10進数はなじめません。」がヒントになりました そこで総合理解の為、VB技術者が陥りやすい罠を... # 尚、ここでいっている「VB技術者」は、 # 「VB技術者の全員」と言う意味ではありません。
VB技術者は、文字のイメージ自体が文字型変数に格納されていると勘違している事が多く その為、VB技術者には、「Cの文字型」は不親切に思え、抵抗を感じます。 つまり、Cをされている人は、「文字コードがマイナスってのが普通に現れる」と 考えられるかもしれませんが、文字コードを並べると下記の様になり、 0,1,2‥126,127,-128,-127‥-2,-1 ←訂正しました (127)の次が(−128)って!!!!! 「文字コード」を「数字感覚」で捉えている人には理解不能なお話です。
VBは暗黙変換が定石(って言い切っちゃうとマズイかな?)です。 VB技術者は開発時に、10進数で物事を考え、 その上に、文字の「1」も数値の「1」も同一視されている事が多いです。 [追記] つまり、コメント的に記述されています。 「↑当然、10進数で表現すればと言う話しで、、、」が、 VB上がり技術者の基本的考えですので、 理解し難い、signed char は何に利用するのかな?と素朴に疑問に沸くのです。 [/追記] VB技術者が意味不明な事を言った場合には、 この辺りを意識して頂けると、話がスムーズになると思います。 # 編集-修正 じゃん♪さんご指摘の内容を訂正致しました。 # 編集-追記 最後が意味不明なので追記 # 編集-修正 NAL-6295さんご指摘の内容を訂正致しました。ん...訂正が多い ^^; [ メッセージ編集済み 編集者: はにまる 編集日時 2004-02-10 22:00 ] | ||||||||||||||||
|
投稿日時: 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 ] |