HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
0327
イナウサ英数列を数字に変換する方法について7未解決


イナウサ

リンク

2017/3/27(Mon) 19:10:02|NO.78681

英字+数字の列があり、それをまとめて数列に変換したくて下のスクリプトを作りました。

text=int(1F0502F0503F0504F0505F0006F000) <pre/> エラーが出ます。正しい変換方法を教えてください。



この記事に返信する


jsAster

リンク

2017/3/27(Mon) 19:18:13|NO.78682

intの括弧の中をSTRの変数にすればできます。



スペース

リンク

2017/3/27(Mon) 19:35:36|NO.78683

これって16進を10進に変換したいでは・・・?



沢渡

リンク

2017/3/27(Mon) 19:43:43|NO.78685

16進数で書かれた数値の羅列を2個ずつ区切り、それぞれを数値として配列変数に代入する、という形でよろしいでしょうか?

#module #defcfunc asc_hex int ah_a //文字コードを引数とし、文字コードが48~57("0"から"9")の場合は48を、 //65~70("A"から"F")の場合は55を、97~102("a"から"f")の場合は87を //引いた数を返す。それ以外の場合は0を返す。 if (ah_a>=48)&(ah_a<=57) : return ah_a-48 if (ah_a>=65)&(ah_a<=70) : return ah_a-55 if (ah_a>=97)&(ah_a<=102) : return ah_a-87 return 0 #global text="1F0502F0503F0504F0505F0006F000" if strlen(text)\2=1 : text=text+"0" //数字の数が奇数個の場合は末尾に0を追加 a=strlen(text)/2 dim dum,a repeat a dum(cnt)=asc_hex(peek(text,cnt*2))*16+asc_hex(peek(text,cnt*2+1)) loop //確認 repeat a mes strf("%02x",dum(cnt))+" "+str(dum(cnt)) loop



イナウサ

リンク

2017/3/27(Mon) 22:08:11|NO.78688

すいませんがstrで試したところ、intと同様にエラーがでました。
沢渡さんの提示して下さったスクリプトですが確認させて頂いたのですが、
何故配列変数にして分ける必要があるのかが分かりません。
お答え頂けると助かります。下にエラー内容を提示しておきます。

<int 使用時のエラー>
#HSP script preprocessor ver3.4 / onion software 1997-2014(c)
#Use file [hspdef.as]
#HSP code generator ver3.4 / onion software 1997-2014(c)
???(1) : error 4 : パラメーター式の記述が無効です (1行目)
--> text=int@hsp(1f0502f0503f0504f0505f0006f000)

<str 使用時のエラー>
#HSP script preprocessor ver3.4 / onion software 1997-2014(c)
#Use file [hspdef.as]
#HSP code generator ver3.4 / onion software 1997-2014(c)
???(1) : error 4 : パラメーター式の記述が無効です (1行目)
--> text=int@hsp(1f0502f0503f0504f0505f0006f000)



MillkeySoftware

リンク

2017/3/28(Tue) 01:31:55|NO.78690

変数型が無制限で扱えると思っているんじゃないかなー。

text=int@hsp(1f0502f0503f0504f0505f0006f000)
を見ると、int に型限界を超えた数値を入れようとしてますし。
文字列なのに、ダブルクォーテーション「"」で囲ってませんし。
変換できない文字列を数値に変換しようとしてますし。

一度、HSP のマニュアルを見る事をお勧めします。



f(昼飯前)

リンク

2017/3/28(Tue) 11:44:08|NO.78695

…過去一連の質問から、要するに件の文字列を
comポートからモーター制御ボードに送信したいと言う事だと思われる。

ぶっちゃけ送るだけならアスキーコードで

comput "1F0502F0503F0504F0505F0006F000"
と、直接送って良いのではないか。
コマンドとして成立しているかどうかは別として普通はこのやり方だ。
シリアルはみんな好き勝手扱うから、絶対とは言い切れないが。

マニュアルよく見たらモータ1を操作したいなら「1F050」とだけ送ればいいし、
モータ6を制御したいなら「6F100」とだけ送ればいいっぽいぞ。



イナウサ

リンク

2017/3/28(Tue) 17:57:00|NO.78696

たくさんの回答ありがとうございます。f(昼飯前)さんには前々からありがとうございます。
マニュアルを読んだところ1F0502F0503F0504F0505F0006F000のコードをシリアル通信で送信
したらよいということなのでをシリアル通信でマイコンに送れば行けるかと思いまして。



ONION software Copyright 1997-2023(c) All rights reserved.