rosでstrtolが動かない
解決したいこと
ROSで16進数文字列を2進数(uint8_t)のデータに変換しようとしたところ、"process has died"とエラーが出て終了してしまいました。
解決方法をおしえていただけると幸いです。
発生している問題・エラー
[SendDevice-1] process has died [pid 46350, exit code -11, cmd /home/user/catkin_ws/devel/lib/SendDevice/SendDevice __name:=SendDevice __log:=/home/user/.ros/log/16b6485e-1d25-11ee-9cfb-b3e43a8360f6/SendDevice-1.log].
log file: /home/user/.ros/log/16b6485e-1d25-11ee-9cfb-b3e43a8360f6/SendDevice-1*.log
該当するソースコード
著作権の関係から該当部分のみ掲載します。
uint8_t SendCallback::ExtractData( const std::string RxDataInString, std::vector<uint8_t>& Data )
{
uint8_t DataLength = stoi( RxDataInString.substr( 4, 1 ) );
for( int i = 0; i < DataLength; i++ )
{
try
{
std::string message = RxDataInString.substr( 5 + i * 2, 2 );
Data[ i ] = strtol( message.c_str() , NULL, 16 );
}
catch(const std::out_of_range& e)
{
ROS_INFO( "Not Received Correctly!" );
}
catch(const std::invalid_argument& e)
{
ROS_INFO( "It's not valid!" );
}
}
return DataLength;
}
自分で試したこと
いろいろと探ってみましたが、strtolの部分が悪さしていることしかわかりませんでした。
またこの関数はros timerで呼び出されており(1000Hz)、呼び出しのレートを小さくしても結果は変わりませんでした。
0