HEXで'0x1E','0x1D''0x00'
をそれぞれ文字型に1字で入れたいのですがどういう記述をすればよいのでしょうか。

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

A 回答 (8件)

参考までに補足です。


>Visual BASIC にはその機能がないため少々困難です。
キャストできますよ。

バイト配列にセットしてあげれば、VBでも操作可能です。。。
    • good
    • 0

 はい、分かりました(笑)



 それは「16進を1桁にする」という意味ではなく、単純に「数値を代入する」という意味です。

 16進数というのは、数え方が違うだけで数字は数字ですので、普通に数値として代入することができます。
 つまり、0x1e は、見た目上は4文字で構成されていますが、コンピューターはこれ4文字を1つの数字と解釈するのです。

 ――が。
 混乱の原因は、今ご覧になっている仕様書それ自体が、Visual BASIC では使えないものであるということです。
 たしかにC言語ならば、a[0]=0x1e という記述をすることができますが、これはC言語が、「一時的に文字列型を数値型として扱う」という、いわゆる「キャスト機能」を持っているから可能になることで、Visual BASIC にはその機能がないため少々困難です。

 ですので、その仕様書を渡した人に、「Visual BASIC では少し難しいと言われたんだけど」と前置きして、どうすればいいか聞いてみてください。

 それが困難な場合は別途補足ください。

この回答への補足

どうやら0x1Eはchr(30)で落ち着くようです。(社内討議の結果)
っていうかこれ以外に捉えようがないという結論にいたりました。
仕様書書いてる人が汎用の人なんではっきりいって何いっても返っ
てこない状況でして^^

windowsのプログラムに動作の説明がないやら
テーブル構造図がないやらで何考えてるのかわかんない感じです。

みなさん  本当にありがとうございました。
回答の早さにびっくりしました。またよろしくお願いします。

補足日時:2001/11/15 13:16
    • good
    • 0

wkStr = StrConv(bytAry, vbUnicode)


でなく、vbFormUnicodeで変換しなければいけないパターンもあるようです。

'0x1E','0x1D''0x00' はこの掲示板に質問をするためのダミーのデータですか。それとも現在のプロジェクトで使用してる生きたデータですか。
もし生きたデータなら、どういう値を返したら正しいのかがわかると、推測しやすいのですが、、、
もしそれが不可能なら、逆に文字列”あ”はバイトでどういう表現がなされているのかだけでもわかると、推測しやすいです。
    • good
    • 0

仕様書やつくりを見てみないとわからないけど、バイトデータから文字列を興すときは、データの入り方によって違うので、二つのパターンがあります。



Dim bytAry(0 To 1) As Byte
Dim wkStr As String

bytAry(0) = &H1E
bytAry(1) = &H1D

'パターン1
wkStr = bytAry
'パターン2
wkStr = StrConv(bytAry, vbUnicode)

こんな感じかな?

で、おそらく'0x00' は文字列の終了を示してると思います。
    • good
    • 0

すいません。

意味がまだ理解できていません。

一つのフィールドを'0x1E'(30)バイトで出力という意味ですか?
それともバイトデータで
'0x1E','0x1D''0x00'
により、一文字を作成するという意味ですか?

この回答への補足

後者の方です。
吐き出しのサイズはx(1)でHEX"1E"とかって書いてあります。

補足日時:2001/11/15 12:10
    • good
    • 0

 基本的に、HEX は、お書きのような形式である限り、絶対に2文字になります。


 1文字にはできません。

 強引にやるとしたら、4ビットを1文字として扱う圧縮文字を使う方法ですが、これだと目で見ることはできず、なんだかよく分からない文字化け文字になります(ただし、圧縮文字はプログラムの効率が上昇する場合もあります)。

この回答への補足

もしかしたらヘキサでないんでしょうか?
仕様書には0x1eを文字1桁のところに代入と書いてあります。

補足日時:2001/11/15 12:03
    • good
    • 0

#1と同意見しか思いうかばないのですが。

。。

どういった答えが望みなのかがよく理解できません。

それぞれを文字列1字ってどういうことですか?
もしC言語からの移行ならば、「Cだったらこうなるのに」とかいうイメージが無いと、言いようが・・・ないのでは・・・

もっと詳細な情報が欲しいです。

この回答への補足

現在accessでテキスト吐き出しをしています。
仕様書には項目は桁数1桁で'0x1E'をセットと書いてあります。

先ほどので行った場合'51'が文字列に代入されてしまってたぶんちがうと
思いました。

これでわかりますでしょうか?
よろしくお願いします。

補足日時:2001/11/15 11:54
    • good
    • 0

dim moji1 as string


dim moji2 as string
dim moji3 as string

moji1=ASC(&H1e)
moji2=ASC(&H1d)
moji3=ASC(&H00)

この回答への補足

Dim RS As String
Dim GS As String

RS = Asc(&H1E)
GS = Asc(&H1D)

RSの値が'51'
RSの値が'50'
になってしまいました。
他にないでしょうか?

補足日時:2001/11/15 11:25
    • good
    • 0

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

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

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

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

Qhexについて

応答メッセージなどに関する文書なのですが、hexという表現が出てきます。04hexとか、27hexとか・・・いろいろなのですが、数字プラスhexというのは、どういう意味なのでしょうか。

Aベストアンサー

16進数である事を表すためにhexやhを使います。
04h、27hと言う具合にです。
04hはコード表でEOT、End Of Text、文の終わり、27hはアポストロフです。意味はその通信のプロトコル次第なのでわかりません。
http://c-production.com/special/03090704.html

QVB2010で、TimeValue("00:00:00")の足し算がで

VB2010で、TimeValue("00:00:00")の足し算ができません。

調べたところ、TimeValu同士の足し算ができそうなのですが、うまくいきません。
以下のコードをどう修正したらよいでしょうか。
どなたか教えていただけませんでしょうか。
よろしくお願いします。


objTime="00:00:00"
objSearchTime = TimeValue(objTime) + TimeValue("00:00:59")
MsgBox(objSearchTime)

メッセージボックスの内容
00:00:0000:00:59

希望結果
00:00:59

Aベストアンサー

こちらはVB2008ですが
参考例
Dim T1 As DateTime = TimeValue("00:00:10")
Dim T2 As DateTime = TimeValue("00:00:59")
MessageBox.Show(TimeValue(T1.AddSeconds(T2.Second)))
出力結果 0:01:09

DateTime同士の足し算だとAddSecondsやAddMinutesのように分や秒といったデータに区切って行えばできますよ。

QHEX2BIN関数の使い方。

HEX2BINを使用して16進数4桁を2進数に変換しようとしたところ=HEX2BIN(B2) (B2セルは6F67)としたところ#NUMエラーが出てしまいます。

B2を”B2”にすれば変換ができたのですが今度はオートフィルが使えなくなってしまいます。

なので、=HEX2BIN(B2)で変換できる方法か””をつかってもオートフィルで=HEX2BIN("C2")などにする方法を教えて下さい Excelは2007です。

Aベストアンサー

> としたところ#NUMエラーが出てしまいます。

ヘルプでは数値に指定できるのは40ビットってなってますが、~1FFより大きい16進数は指定できません。


> B2を”B2”にすれば変換ができたのですが

B2セルの内容でなくて、B2という16進数を変換しています。
セル指定してるわけでないので、オートフィル出来ないのは自明。


> なので、=HEX2BIN(B2)で変換できる方法か

B2セルに、
1FF
B2
なんかの桁数の少ない16進数を指定するか、2バイトずつ桁数分けて2進数にするとか。
必ず4桁の16進数が指定されるのなら、
=HEX2BIN(LEFT(B2,2),8)&HEX2BIN(RIGHT(B2,2),8)
とか。

QエクセルVBAで時計が00秒になった時に処理を始めるようにしたいのですが、記述方法が分かりません。

宜しくお願い致します。

エクセルVBAで時計が00秒になった時に処理を始めるようにしたいのですが、記述方法が分かりません。

ひとつのセルにリアルタイムに更新される時計を表示しておりますが、現状では、ある処理を行う際に“38秒"などの中途半端な秒数の状態でも処理が行われ、その秒数を基準に1分後や5分後を算出する形となっております。
そんなに大きな問題ではないのかもしれませんが、なんとなくキチッとした“00秒”で基準が開始されるようにできたらと思っております。
VBAにおける時間に関しての記述方法がよく分かりませんので、ご存知の方がおられましたら、教えていただけたらと思っております。

宜しくお願い致します。

Aベストアンサー

Sub test2()
'以下の2行で00秒を検出します。
While Second(Now) <> 0
Wend
'以下、sub test()を毎00秒に5回実行します。
mytime = Now
Application.OnTime mytime, "test"
For i = 1 To 4
mytime = mytime + TimeValue("00:01:00")
Application.OnTime mytime, "test"
Next
End Sub

QVB6にてHEXコード「EE」をファイルに書きたい。

VB6を使用して、HEXコードの「EE」をテキストファイルに出力しようと考えています。

私が確認したところ
HEXコードの「DF」は、Chr(&HDF)にて出力できるのですが、
HEXコードの「E0」以降はうまく出力できません。

どなたかお解りになる方ご教授を、よろしくお願いします。

Aベストアンサー

うまく動かないみたいだね。これは驚いた。

一応、次のコードをイミディエイトウィンドウで試してみましたが、
両方ともダメでした。
?hex$(asc(chr(&hee)))
?hex(ascb(&hee))

最初の方は質問者さんのところでは20になるとのことでしたが、
私の環境では00、後者は20になりました。

これは宣言を文字列でなくバイト配列で扱う方が簡単でいいです。
それで私ならbinaryモードでオープンしてputとgetで一括処理しますが、
ここら辺は設計に関する問題なので言及はいたしません。

Q'2465'指定した式で参照している'直線Aii'フィールドが見つかり

'2465'指定した式で参照している'直線Aii'フィールドが見つかりません。

入力されたテキストDELTUKIをiiにセットして直線Aii~Ciiに反映させたいです。
DELTUKIには0~12までのどれかがセットされて、00の場合には未可視、それ以外は
該当月の直線Aii~Ciiを可視化させたいです。
ですが、上記エラーが発生します。
どなたかご指南頂きたくよろしくお願い致します。
※.メイン画面の画像添付参照願います。
※.vba vb6 winXP
SetLowerLine:
With objrep
!直線103.Visible = True
!直線104.Visible = True
!直線105.Visible = True
!直線106.Visible = True
!直線107.Visible = True
End With
'Reports(stdocname)!直線103.Visible = True
'Reports(stdocname)!直線104.Visible = True
'Reports(stdocname)!直線105.Visible = True
'Reports(stdocname)!直線106.Visible = True
'Reports(stdocname)!直線107.Visible = True

Format ("00")
ii = Forms!メイン画面![テキストDELTUKI]
If ii = "00" Then
Else
objrep.Controls("直線A" & "ii").Visible = True
objrep.Controls("直線B" & "ii").Visible = True
objrep.Controls("直線C" & "ii").Visible = True
End If

'2465'指定した式で参照している'直線Aii'フィールドが見つかりません。

入力されたテキストDELTUKIをiiにセットして直線Aii~Ciiに反映させたいです。
DELTUKIには0~12までのどれかがセットされて、00の場合には未可視、それ以外は
該当月の直線Aii~Ciiを可視化させたいです。
ですが、上記エラーが発生します。
どなたかご指南頂きたくよろしくお願い致します。
※.メイン画面の画像添付参照願います。
※.vba vb6 winXP
SetLowerLine:
With objrep
!直線103.Visible = True
!直線104....続きを読む

Aベストアンサー

すみません、先日のこちらのご質問での回答者です:
http://oshiete1.goo.ne.jp/qa5770608.html

前回の回答2への補足の件のうち、「(2)」と「(3)」については
結局私では対処法の見当をつけかねたままなのですが(汗)、
本件についてだけはどうにかなりそうなので、回答をつけさせて
戴きます。

・・・というか、前回「"」を外すことを指摘した際に気づいて
いればよかったのですが、これも見落としていました(汗)
以下の部分を、下記のように修正してください。

【現在】
Format ("00")
ii = Forms!メイン画面![テキストDELTUKI]

If ii = "00" Then
Else
  objrep.Controls("直線A" & "ii").Visible = True
  objrep.Controls("直線B" & "ii").Visible = True
  objrep.Controls("直線C" & "ii").Visible = True
End If

【修正】
'変数「ii」に対して、Format関数で桁表示を指定
ii = Format(Forms!メイン画面![テキストDELTUKI], "00")

If ii = "00" Then
Else
  '「ii」を変数として使用するため、「"」は外します
  objrep.Controls("直線A" & ii).Visible = True
  objrep.Controls("直線B" & ii).Visible = True
  objrep.Controls("直線C" & ii).Visible = True
End If


・・・以上です。

これで、「テキストDELTUKI」に1桁の数字(「1」や「2」など)を
指定した場合も、「直線A01」や「直線A02」に処理が行われる
ようになると思います。

すみません、先日のこちらのご質問での回答者です:
http://oshiete1.goo.ne.jp/qa5770608.html

前回の回答2への補足の件のうち、「(2)」と「(3)」については
結局私では対処法の見当をつけかねたままなのですが(汗)、
本件についてだけはどうにかなりそうなので、回答をつけさせて
戴きます。

・・・というか、前回「"」を外すことを指摘した際に気づいて
いればよかったのですが、これも見落としていました(汗)
以下の部分を、下記のように修正してください。

【現在】
Format ("00")
ii = For...続きを読む

Qphpのhex2binについてphpで、utf-16の文字をbin2hexに通し、hex2bin

phpのhex2binについて
phpで、utf-16の文字をbin2hexに通し、
hex2binに再度かけると、その16進数をutf-8と捉えられ、漢字等が上手く戻りません。
対策等無いですか?
文章では分かりにくいかと思いますので、コードの一例を載せておきます。
<?
$deta = "漢字";
$a = bin2hex(mb_convert_encoding($deta,"UTF-16LE"));
//$aは226f575b
echo hex2bin($a);//ここで「漢字」とechoされて欲しい
?>
実際表示されるのは "oW[ で、これはutf-8では226f575bとなります。

Aベストアンサー

違います。
正しく元の UTF-16LE に変換されています。
より正確に言えば、 bin2hex で16進文字列に変換されたバイト列が、hex2binで元のバイト列に戻されています。

0x22 0x6f 0x57 0x5b となったバイト列を「UTF-16LEの『漢字』」と解釈するのか、 「ASCII互換コードの 『"oW[ 』」と解釈するのかは、それを表示するアプリケーションです。

例えば、ブラウザに "oW[ と表示されるのなら、それは、ブラウザがUTF-16LEと解釈していないからです。

よって、対策は
・アプリケーション側の設定を変えて、UTF-16LEと解釈するようにする
・UTF-16LEからアプリケーション側で対応している文字コードに変換して出力する
のいずれかになります。

Q時間を合計すると『0:00』となります

Excelで勤務時間の計算をしたいのです。1日の勤務時間から、1ヶ月間の勤務時間を計算しようとしています。0:30,1:00,1:30を合計して3:00と表示したいと考えます。今までエクセルで作成したものはきちんと作動していましたが、今回は上手くいきません。セルの書式で[h]:mmとしSUM(範囲)を使用しましたが0:00と表示されます。上記の0:30の時間は別のアクセスソフトから貼り付けています。一応解決方法が2種類見つかりました。その0:30などの数字を打ち直したらキチンと動きます。しかし全部の数字を打ち直すのはかなりの手間です。もちろん半角数字を使用しています。また関数がSUM(A1:A3)だと0:00ですが、SUM(A1+A2+A3)だと3:00と表示されます。しかしこれも+を打ち込むのがかなり手間です。これらの状況をふまえた上でどなたか簡単な解決方法を教えてください。本当に困っています。

Aベストアンサー

VisualBasic や VBA で、、、、では無いのですね?

データベース等から持ってきたデータで良く起こるデータ型に関するトラブルに思えます。

アクセスから貼り付けた1列の範囲(例では A1:A3)を選択して、メニューのデータ-区切り位置-次へ-次へ-完了としたら計算結果はどうなりますか?

QHEX9.5の意味をおしえてください。

HEX9.5の意味をおしえてください。
機械図面にHEX9.5という表示があるのですが、規格に二面幅が9.5mmのナットはありません。
どのように考えればよいのでしょうか。

Aベストアンサー

HEXといえば
ヘクスローブ、かなぁ。

>機械図面にHEX9.5という表示があるのですが、

とだけあっても図面は日本のJIS規格のものなのか、
図面のどこを指してるのか一切不明だし

>規格に二面幅が9.5mmのナットはありません。

とあるのでビス、ナット関係かと思い回答しました。

海外は知りませんが日本では、電話機など一般人に弄られたくない箇所に使います。
(秋葉などで工具を買えるので厳格じゃないんですけどね)

QVB6変数の宣言dim j,k,p,m,n as Integerは良くない?

お世話になります。

VB暦1年です。

汎用の変数宣言でタイトルのように
dim j,k,p,m,n as Integer
dim ssa,ssb as String

など、カンマ区切りで変数宣言を使っていたのですが
最近、知人にasの手前の変数は型どおり宣言されるが
その手前の変数はVariant型で宣言されてしまうと指摘されました。

指摘されるまで気にはしていませんでしたが
ウォッチで確認すると変数に代入されるまでは
型がVariant/Emptyとなってます。

以後、気をつければいいのですが
過去にコーディングしたプログラムにも多少、使用していて客先に納品してしまっているものもあります。
後々、問題になるのかな?

Aベストアンサー

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというようなバグの原因になりやすいので、型を明示できるような状況で敢えてVariant型を使うべきではないです。

しかし、すでに納品してしまったコードについては、問題はメモリを余計に使ってしまうことくらいではないでしょうか?
他の人が気づかなかったことから考えるに、多分狭いスコープで使っていますよね? 比較対象や代入するべき型を誤るというようなロジックの誤りがない限り、少なくとも動作上の問題は発生しないと思います。ただ、直せる機会があるのであれば、直した方がいいとは思いますが。

おっしゃる通り、カンマで区切る場合は、
Dim j As Integer, k As Integer, p As Integer
という風にすべてAsで型を明示しないと、
Variant型になってしまいます。
つまり、
Dim j
Dim k
Dim p As Integer
とわけて書いた場合と同じです。
(VB.NETは、
Dim j, k, p As Integer
で全部Integerになるようなので、ややこしいですね)

すでにご存知とも思いますが、一般的にVariant型を多用しているコードは、宣言を見ても、どういう種類の値を使うかわかりづらいですし、比較対象の型を誤るというよう...続きを読む


人気Q&Aランキング

おすすめ情報