お世話になっております。

やりたいのは、MSCommを使用しデータを送った時、
データのチェックをしたいのですが、Chr関数(値を151を入れる)で作った文字をAsc関数で戻すと値が0になってしまってチェックできません。
文字列で受け取ったデータをどのようにコード変換したらよいでしょうか?

VBのバグなのか知りませんけど、
例えば、Asc(Chr$(151))、AscB(Chr$(151))は0を返し、AscB(ChrB$(151))だけが151を返します。

使用しているのは、
VB6SP4
Win2000です。

宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

たしかにChr$(151)は「0」を返しますね


ただ、この値は制御文字かな?(あまり自信ありません)
自分がASCIIコードの調査用に作成したコーディングを下記に記します
イミディエイトウィンドウにて確認できます
着眼点が間違っていたらすみません
'~~~~~~~~~~~
Dim Tmp As String

Private Sub Command0_Click()
Dim i As Integer
Tmp = ""
For i = 0 To 255 Step 1
Tmp = Tmp & Chr$(i)
'Debug.Print Format(i, "000") & " : " & Chr$(i)
Next i
Debug.Print Tmp
End Sub

Private Sub Command1_Click()
Dim i As Integer
Dim n As Integer
Dim w As Byte
Dim ret As String
n = Len(Tmp)
ret = ""
For i = 1 To n Step 1
w = Asc(Mid(Tmp, i, 1))
ret = ret & Hex(w \ 16)
ret = ret & Hex(w Mod 16)
'Debug.Print Format(i, "000") & " : " & Hex(w \ 16) & Hex(w Mod 16)
ret = ret & " "
Next i
Debug.Print ret
End Sub
'~~~~~~~~~~~
    • good
    • 0
この回答へのお礼

素早い回答有難うございます。

Chr$(151)が、0を返すのは、Windowsで使用されていない文字のため、みたいです。

データの送受信ですが、MSCommのInputModeをバイナリに代えることで実現できました。

それでは、また。

お礼日時:2001/09/07 13:45

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q福岡でスーツを買いたい!

就活のため、福岡でスーツを買おうと思っています。予算は3~4万程度を考えているのですが、お勧めの店などはありますでしょうか?
オーダーかどうかなどには特にこだわりはありません、学生なのでベーシックでそれなりの質の物が買えればいいと考えています。
よろしくお願いします。

Aベストアンサー

男性ではありませんが、主人の付き添いで行っていますので・・・・・

大きな通り沿いに「はるやま」「フタタ」「洋服の青山」など結構あちこちありますよね。 価格や品質はどちらの店も大差ありませんから、お近くにあればそちらに行かれたら良いと思います。 価格も1万円台からあります。
もちろんブランド物もありますよ。
週末に新聞チラシがよくはいっているのでチェックしてみて下さい。

あと、キャナルシティの中にある「THE SUIT COMPANY」 価格も確か2万前後あたりからあります。
こちらのお店の雰囲気も他に比べればおしゃれな感じで若い人向けって感じですね。 
主人はいい年(40代)なのでこちらでは購入したことはないので品質については不明ですが。

QVBのMSCommコントロールを使ってシリアル通信をしています。

VBのMSCommコントロールを使ってシリアル通信をしています。
データ受信時、90byteを超えたあたりで"??"(ASCIIコードで0x3Fが2回)が
挿入されたように受信されてしまいます。
前後のデータ関係をみると、2byteがデータ化けを起こしているわけでは
なく、"??"が間に挿入されたような形です。
"??"が挿入される位置も受信の度に違います。
もしこのような現象の理由がわかる方がいらっしゃいましたら
回避策をお教えください。

<詳細設定>
38.4kbps、データ長:7、パリティ:Even、Stop bit :1 の設定。
http://www.compass-lab.com/STK_CAN/USB_Serial/USB_COMi.htm
にあるUSB-comiでシリアルポートを追加してRS422変換しています。
データ長129byteのデータが250ms周期で送られてくるのを
読み取ろうとしています。

Aベストアンサー

> 送信信号は問題無いのを確認しているため、
> RS422-USB変換器が悪さしているのか、、、

確認するには他の通信ソフトを使用して、受信してみてはいかがでしょうか。

Acknowrich
http://www.vector.co.jp/soft/win95/prog/se089304.html

このようなソフトで受信してみて、同じ現象だったら入力側(送信データかRS422)の問題、正しく受信できたら開発されたソフトの問題ということになります。

まず、この切り分けをしてから原因を追究した方が楽かと思います。

QEXCELVBAスタンダードとACCESSVBAベーシックどちらが難し

EXCELVBAスタンダードとACCESSVBAベーシックどちらが難しい?
この間、EXCELVBAベーシックを取得しました。次に取得する順番ですが、EXCELVBAスタンダードとACCESSVBAベーシックどちらに挑戦したらよいでしょうか?やはり簡単なベーシックを先にやるべきでしょうか?

Aベストアンサー

そのスタンダードとかベーシックというのは、「VBAエキスパート」という括りの中の話だと思います。

逆説的な言い方になるのですが、Excel VBAエキスパートのスタンダードさえも、知識としては中途半端です。そういう資格を持っていても、その実態をよく知っている人なら、この人がプログラムを組めるとは思わないでしょう。その上のプロフェッショナルとなると、知識としてはあるとは思います。でも、プロフェッショナルというのは、クラスの設定とか出てきますが、VBAだけでは、さっぱり分からないのではないかと思います。

Excel VBAをなめている人は多いけれども、現実に、ExcelのVBAで本当に組めるというのは、VBAの積み上げ式では役に立たないのです。やはり、VBや他の言語のサイズダウンという考え方が正解ではないのかなって思います。しかし、知らない人からみれば、下手くそなスパゲティーコードでも、プロ級のコードでも、結果が同じなら、知らない人には優劣なんて分かりません。中には、VBAのコーディング・ルールなんてありません、と平気に私に反論する質問者もいるぐらいで、Excel VBAのユーザーとは有象無象です。VBAインストラクターでも、悪乗りも過ぎるという人間もいますからね。

ですから、知識としてみるなら、Access VBAベーシックを持っていれば、多少、見方が変わるとは思いますね。しかし、Access VBAの範囲というのは、非常に範囲は狭いような気がします。

#何のために?
うーん。

人に自慢するため(^^;
でも、この資格試験って、その程度しかないように思います。皮肉っぽくて悪いけれども、とにかく、豊富な経験に勝るものはありませんね。

そのスタンダードとかベーシックというのは、「VBAエキスパート」という括りの中の話だと思います。

逆説的な言い方になるのですが、Excel VBAエキスパートのスタンダードさえも、知識としては中途半端です。そういう資格を持っていても、その実態をよく知っている人なら、この人がプログラムを組めるとは思わないでしょう。その上のプロフェッショナルとなると、知識としてはあるとは思います。でも、プロフェッショナルというのは、クラスの設定とか出てきますが、VBAだけでは、さっぱり分からないのではない...続きを読む

QMscomm を使用してバイナリでデータを受信したい

Mscommを使用して、垂れ流しデーターをバイナリで受信(受信データ長さは変化する)するとき、このデーターをどうやって、配列に格納していけば良いのでしょうか?

(垂れ流しデータ ⇒ < STX >nnn-nnn・・・・< ETX >< CHK >)

また、配列に格納したデーターを文字に置き換えるにはどうすれば良いでしょうか?

まず考え方として以下の流れでよいでしょうか?

バイナリデータをバリアント型の変数に入れる。(受信する)
     ↓
このデータを1バイトごとにバイト型変数の配列に入れていく。
     ↓
格納した配列の中の制御文字を取り除く。( ST、EX )
     ↓
配列に入っているデータを文字に変換する。
     ↓
変換した文字をつなぐ。

受信するデーターが制御文字を含んでいる為、テキストで受信するとおかしな動作をすることがあるので(150バイト程度のデーターを、バッファから変数に移すときに、0.5~2.5秒もかかってしまうし、文字化けも時々起こす。)バイナリで受信してその後文字に変換したいのですが・・・。

宜しくお願い致します。

Mscommを使用して、垂れ流しデーターをバイナリで受信(受信データ長さは変化する)するとき、このデーターをどうやって、配列に格納していけば良いのでしょうか?

(垂れ流しデータ ⇒ < STX >nnn-nnn・・・・< ETX >< CHK >)

また、配列に格納したデーターを文字に置き換えるにはどうすれば良いでしょうか?

まず考え方として以下の流れでよいでしょうか?

バイナリデータをバリアント型の変数に入れる。(受信する)
     ↓
このデータを1バイトごとにバイト型変数の配列に入れていく。
   ...続きを読む

Aベストアンサー

(記憶が薄いので、正確ではありません。)

Dim bytAry() as byte
として、それに直接受信してあげると必要な領域を勝手にVB側で用意してくれると思いました。

それを
Dim strWork as String
(1)strWork = strConv(bytAry,vbUnicode)
(2)strWork = strConv(bytAry,vbFormUnicode)
どっちかで変換だったと思うけど、それでバイナリデータを文字列化します。

そのあと
VB6ならReplace関数で制御文字だけを置き換えて使用すると便利かも?

最初に述べたように、かなり記憶があいまいです。環境がないので性格には答えられません。m(__)m

Qディスクの管理 ベーシックかダイナミックか

SATA HDDを3台内蔵しています
NTFSフォーマットです

Cドラ:500G(465.75G)・・・ベーシック
Eドラ:400G(372.61G)・・・ベーシック
Fドラ:2テラ(1863.01G)・・・ダイナミック

ベーシック?
ダイナミック?
性能的に違いはあるのでしょうか?

ベーシックを右クリックすると、”ダイナミックディスクに変換”
と選べますが、どういう効果があるのでしょうか?

WinXP Pro SP3です

Aベストアンサー

ANo.1です。

ダイナミックディスクからベーシックディスクへの変換は、次の通りです。
http://www.careerdesign.co.jp/index.php?option=com_content&task=view&id=285&Itemid=148

要は、パーティションを一端削除して再度確保すれば、自動的にベーシックディスクになるようです。データがある場合は、別のHDD等にバックアップしておく必要があります。これが、一番単純で分かり易い方法だと思います。

下記のフリーソフトウエアをインストールして、パーティションの操作を行っても良いでしょう。参考まで。
http://gigazine.net/news/20101118_Easeus_Partition_Manager/

QVB6 API LISTVIEW(チェックボックス付き)にチェックを付けたい

CreateWindowExでLISTVIEW(チェックボックス付きのレポートビュー)を作ったのですが、「山田花子」行にソースでチェックを付ける方法が分かりません。

Form1のソース

Option Explicit

Private Sub Form_Load()

Dim lngRet As Long
Dim lvcol As LV_COLUMN
Dim rStyle As Long
Dim item As LV_ITEM

'-- リストビューの作成
hList = CreateWindowEx(WS_EX_CLIENTEDGE, _
WC_LISTVIEW, "", _
WS_CHILD Or WS_VISIBLE Or WS_BORDER Or _
WS_CLIPSIBLINGS Or WS_CLIPCHILDREN Or _
LVS_REPORT, _
0&, 0&, Me.ScaleWidth / Screen.TwipsPerPixelX, 200&, _
Me.hwnd, _
0&, _
App.HINSTANCE, _
ByVal 0&)

'拡張スタイルを設定
rStyle = rStyle Or LVS_EX_FULLROWSELECT Or LVS_EX_GRIDLINES Or LVS_EX_CHECKBOXES
SendMessageByNum hList, LVM_SETEXTENDEDLISTVIEWSTYLE, 0&, rStyle

'-- カラムヘッダーの追加
With lvcol

.mask = LVCF_FMT Or LVCF_WIDTH Or LVCF_TEXT Or LVCF_SUBITEM
.fmt = LVCFMT_LEFT
.cx = 100
.pszText = "名前"
.iSubItem = 0
lngRet = ListView_InsertColumn(hList, 0&, lvcol)

End With

'-- リストアイテムの追加
With item

.mask = LVIF_TEXT Or LVIF_IMAGE

' 1つめ
.pszText = "山田 太郎"
.iItem = 0
.iSubItem = 0
.iImage = 0
lngRet = ListView_InsertItem(hList, item)

' 2つめ
.pszText = "山田 花子"
.iItem = 1
.iSubItem = 0
.iImage = 1
lngRet = ListView_InsertItem(hList, item)

End With

End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
'-- リストビューを破棄
DestroyWindow hList
End Sub

標準モジュールは補足に書きます

CreateWindowExでLISTVIEW(チェックボックス付きのレポートビュー)を作ったのですが、「山田花子」行にソースでチェックを付ける方法が分かりません。

Form1のソース

Option Explicit

Private Sub Form_Load()

Dim lngRet As Long
Dim lvcol As LV_COLUMN
Dim rStyle As Long
Dim item As LV_ITEM

'-- リストビューの作成
hList = CreateWindowEx(WS_EX_CLIENTEDGE, _
WC_LISTVIEW, "", _
WS_CH...続きを読む

Aベストアンサー

LVITEMのstateMaskとstateメンバを適切に設定してLVM_SETITEMSTATEメッセージを送ればいいようです

Pubic Sub ListView_SetCheckState( hWnd as long, n as long, bflag as integer)
Const LVM_SETITMSTATE = (LVM_FIRST + 43)
  dim oItem as LVITEM
  dim bit as integer
  if bflag then
    bit = &h2000
  else
    bit = &h1000
  end if
  oItem.stateMask = &HF000
  oItem.state = bit

  SendMessage hWnd, LVM_SETITEMSTATE, n, oItem
End Sub

チェック状態の取得は
Pubic Function ListView_GetCheckState( hWnd as long, n as long ) as integer
  Const LVM_GETITMSTATE = (LVM_FIRST + 44)
  dim state as long
  state = SendMessage( hWnd, LVM_GETITEMSTATE, n, &HF000) / 4096
  ListView_GetCheckState = state - 1
End Function

といった具合だと思います

LVITEMのstateMaskとstateメンバを適切に設定してLVM_SETITEMSTATEメッセージを送ればいいようです

Pubic Sub ListView_SetCheckState( hWnd as long, n as long, bflag as integer)
Const LVM_SETITMSTATE = (LVM_FIRST + 43)
  dim oItem as LVITEM
  dim bit as integer
  if bflag then
    bit = &h2000
  else
    bit = &h1000
  end if
  oItem.stateMask = &HF000
  oItem.state = bit

  SendMessage hWnd, LVM_SETITEMSTATE, n, oItem
End Sub

チェック状...続きを読む

Q【日本にベーシックインカムを導入すべきではない理由】 日本の自立生活困難者の生活保護世帯は全世帯の1

【日本にベーシックインカムを導入すべきではない理由】

日本の自立生活困難者の生活保護世帯は全世帯の1.7%にすぎない。

よって日本政府が全国民に対して平等な最低収入源となるベーシックインカムを導入する方が経済鈍化に繋がる。

アメリカの生活保護世帯は10%に登りアメリカこそベーシックインカムを最優先で導入すべき国だが自由の国でさらに資本主義の国、故にアメリカがベーシックインカムを導入することは選挙で得票操作を得意とする富裕層からの反発は免れないので実現した方が良いが出来ない国である。

一方の日本は自民党の一党独裁政権化にあるのでベーシックインカムの導入は強行突破で出来る国である。しかしやらない方が良い。

世界でベーシックインカムに1番興味がある欧州ヨーロッパ諸国の生活保護世帯の割合は5%である。

5%の生活保護世帯がいる世の中ではベーシックインカムを導入した方がコストが安くなると見積もりをしているようだ。

1.7%しか生活保護世帯がいない日本にベーシックインカムは必要ないし導入したら逆に生産性が落ちて生活保護世帯が増えると見ている。

せっかく生活保護世帯が1.7%で世界的に見ても貧困層が少ない日本でベーシックインカムを導入して低所得者が働くのを辞めて生活保護世帯入りするとせっかく1.7%に抑え込むklとができていた日本の社会保障制度が崩壊してベーシックインカムを廃止になったときにベーシックインカム導入前以上の生活保護世帯が増加してそれを減らす努力を無駄にすることになる。

1.7%の人に生活保護費を払っている方が安上がりに済む。

【日本にベーシックインカムを導入すべきではない理由】

日本の自立生活困難者の生活保護世帯は全世帯の1.7%にすぎない。

よって日本政府が全国民に対して平等な最低収入源となるベーシックインカムを導入する方が経済鈍化に繋がる。

アメリカの生活保護世帯は10%に登りアメリカこそベーシックインカムを最優先で導入すべき国だが自由の国でさらに資本主義の国、故にアメリカがベーシックインカムを導入することは選挙で得票操作を得意とする富裕層からの反発は免れないので実現した方が良いが出来ない国である...続きを読む

Aベストアンサー

僕は、福祉目的というよりも、違う目的ということなのですが、日本でベーシックインカムを導入してもよいのではないのかな、と思うのですが、どうなるかは実際にやってみないと分かりませんね。

【参考質問 ベーシックインカム制度】
僕のした質問です。
https://oshiete.goo.ne.jp/qa/9661301.html

QVB2008かVB2005で、チェックボックスをループ文を使ってFalseにしたい

Visual Basic 2008か2005で
グループボックス1に50個、
グループボックス2に25個ののチェックボックスがあるとします。
これらのうち、グループボックス1の50個のチェックボックスだけ
全てチェックを外す処理を作りたいのですが、
1個1個チェックボックスをFalseにする文を記述すると
同じ様なソースが増えてしまうので、
Forのようなループを使って簡潔に書くことは出来ないでしょうか?

出来れば、ソースを記述してほしいです。
すみませんがよろしくお願いします。

Aベストアンサー

こんにちは、

グループボックス1に、チェックボックスのみ50個しかないと
仮定すると(グループボックス1にテキストボックス等などの
コントロールが他にない)

以下のコードで出来そうです。

Dim o As Object

For Each o In Me.GroupBox1.Controls

o.CheckState = 1


Next


すべてのチェックボックスをオンの時
o.CheckState = 1
オフの時
o.CheckState = 0

ちなみに、グループボックスの数は、今回は、関係ないです。
グループボックス、全部オンにするか、オフにするかになります。

Qベーシックインカムを取り入れている国、地方自治体があれば教えてください

ベーシックインカムを取り入れている国、地方自治体があれば教えてください

「ベーシック・インカムとは,個人ベースで,資力調査および就労要請なしに,すべての人に無条件であたえられる所得である」(BIEN のHPより)とするのが一般的であるものの,現代のベーシックインカム論壇(Basic Income Debate)においては,このような意味でのベーシックインカムのみが議論の対象となっているわけではないし,論者によってはベーシックインカムをもっと広くまたは狭く定義する。

Aベストアンサー

 現在、ベーシックインカム(給付型税額控除)の考え方を一番取り入れているのはアメリカである。稼得所得税額控除EITCと呼ばれる制度は1975年に導入され、2004年時点で2000万世帯が給付を受けている。(日本の生活扶助受給世帯は125万世帯)

 イギリスでも、就労税額控除と児童税額控除がある。2004年の受給世帯は600万世帯弱であった。

 この両国が取り組んだ理由は、「福祉から就労へ」という考え方の転換を図るためであったが、必ずしも就労にこだわらない面もある。

 なお、フランスやNZでも、給付型の税額控除が採用されている。

Q【VB6】 変数1 = 変数1 Or $H2

他の人が作ったプログラムの修正を行っていたところ、下記のような記述がありました。
このような Or や And の使われ方はどのようなことを意味するのでしょうか?
(gStatusはintegerです。)

記述(1)
gStatus = gs_Status Or &H2

記述(2)
If (gStatus And &H2) = &H2 Then
'処理
End IF


宜しくお願い致します。

Aベストアンサー

&H2は、16進数の「2」をあらわします。
ご質問のケースでは、BIT1の状態を制御、確認しています。
記述(1)
gs_Status のBIT1をONしている。
記述(2)
gs_Status のBIT1がONか、どうか判断している。
(gs_Status をBIT1でマスク(BIT1の情報のみを抽出))し、
BIT1と比較している。
16進数・2進数・論理演算を学習されては?
http://f1.aaa.livedoor.jp/~zahyou/oldvb/ronri.htm
http://www5b.biglobe.ne.jp/~yone-ken/VB/BinHexDec.html
http://www5b.biglobe.ne.jp/~yone-ken/VB/BinHexDec2.html


人気Q&Aランキング