【HALCON】文字型→整数型への変換でハマった件

読み込んだ画像のファイル名に付記されている数字情報を整数型のtupleにしたいという処理でハマったので備忘録がてらまとめる。

以下のような画像ファイル名を読み込んで**部分の数字情報(今回は01、02、・・・となっている)を整数型のtupleにしたい。
画像ファイル名: YYYY-MM-DD_No.**.bmp

tuple_str_first_nとかを駆使して「**」を抽出できたのだが、当然ながら、String型(文字列)として認識される。
そこでさらに、tuple_numberを用いて、String型のtupleをint型のtupleに変換するという処理を構築した。
文字型→整数型のtuple_numberでハマった。

tuple_numberの仕様について、HALCONのヘルプには以下のように記載されている。

tuple_numberは、入力タプルTをタプルの数に変換します。入力タプルに数値が含まれている場合、それらは単純に出力タプルにコピーされます。文字列は、数値(整数または浮動小数点数)の適切なタイプに変換されるか、数値を表さない場合は文字列としてコピーされます。 0xで始まる文字列は16進数として解釈され、0から始まる文字列は8進数として解釈されることに注意してください。たとえば、文字列 ’20’は整数20に、 ‘020’は16に、 ‘0x20’は32に変換されます。
https://www.mvtec.com/doc/halcon/13/en/tuple_is_number.html

tuple_numberが「0から始まる文字列は8進数として解釈される」ということを知らずに、10進数だとばかり思い込んでいたら痛い目にあった。
(まさか、8進数や16進数が仕様になっているとは。。。)

08という文字列を数字に変換しようとすると、エラーではなく、「08」というstring型が返される。なぜなら08は8進数として解釈されるが、8進数に8は存在しないため。
09も同様に、09という文字列を数字に変換しようとすると、エラーではなく、「08」というstring型が返される。なぜなら09は8進数として解釈されるが、8進数に9は存在しないため。
実行時にエラーになるなら気がつくのも早いが、「08」というstring型が返されたので、HALCONのバグかと思ってしまった。

tuple_numberを使用する際はご注意ください。

コメント

タイトルとURLをコピーしました