16進の文字列をst​r2doubleで数​に変換時に1桁目に「​E」が混ざると処理で​きない

52 views (last 30 days)
mayu
mayu on 30 Oct 2024 at 1:56
Commented: Akira Agata on 1 Nov 2024 at 3:00
16進の文字列をstr2doubleで数値に変換しようとしているのですが、16進文字列の1桁目にEのアルファベットが入っていると、画像のように変換結果がNaNになってしまいます。
私の環境によるものでしょうか❓
原因が分からなくて、もし分かる方がいらっしゃいましたらご教示いただけますと幸いです。
どうぞよろしくお願いいたします。
  1 Comment
mayu
mayu on 30 Oct 2024 at 2:17
Edited: mayu on 30 Oct 2024 at 2:29
ちなみに、str2numだとエラーが出ないのですが、
AppDesignerで作成しているアプリのコールバック関数内に書くと、
「スカラー値の演算を行う場合は、パフォーマンスを高めるために STR2DOUBLE の使用を検討してください。」
というアナウンスが出ます。
str2numとstr2doubleの違いについてもよく分からなかったので、以下のページも見ていたのですが、一般的にはstr2doubleを使用するのでしょうか。

Sign in to comment.

Accepted Answer

Akira Agata
Akira Agata on 30 Oct 2024 at 3:29
16進数の文字列を数値に変換するには、hex2dec をお使い下さい。
hex2dec('0x0E')
ans = 14
  3 Comments
mayu
mayu on 30 Oct 2024 at 7:09
Edited: mayu on 30 Oct 2024 at 7:10
■メモ:
str2doubleで変換時、1桁目がEの場合にエラーが出る(処理がNaNになる、「入力は有限にする必要があります」のアラートが出る)
 ➡ E表記として処理されるため❓に値・桁数が決まらずエラーとなったのかも❓
Akira Agata
Akira Agata on 1 Nov 2024 at 3:00
@mayu
うまく処理できたとのことで安心しました。
ちなみに str2double でエラーとなったのは、E が関数内部で10のべき乗と解釈されるためです。
たとえば str2double("3.14E2") と入れて頂くと、314 ( = 3.14×10^2) が返ってきます。
このため、今回のように 0x0E を入れると、Eのうしろに数字がないため10を何乗にすれば良いかが分からず、NaNが返ってくることになります(以下の例をご参照ください)。
今回は str2double に入力したE以外の文字が幸い16進数として解釈されたようですが、この関数の仕様上A~F などの文字は正式には対応していないため、「たまたまうまくいった」と捉えて頂ければと思います(ぜひ hex2dec をご活用ください!👍)
str2double("3.14E")
ans = NaN
str2double("3.14E2")
ans = 314

Sign in to comment.

More Answers (0)

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!