/* ライブラリして使用するので gcc -g -c -o tools.o tools.cpp でコンパイルして下さい。 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "c-anemone2.h" const int hhmm_size = sizeof("HH:MM"); // "HH:MM"の文字列確保サイズ == 6 double div_by_zero(double a, double b) { if (b == 0){ return 0.0; } return a / b; }; // 実数値(6.2)を時刻表記("06:12")に変換する void real_to_HHMM(double a, char* str) { // char* strの実体は、メインで5バイト以上確保していなかったら // 動作は保証しない int HH = (int)a; int MM = (int)((a - (int)a) * 60); sprintf(str, "%02d:%02d",HH,MM); // この"%02d"で、1→01と表記してくれる } // 時刻表記("06:12")を実数値(6.2)に変換する double HHMM_to_real(char* str) { char s2[] = ":"; char *tok; char s1[hhmm_size]; memcpy(s1, str, hhmm_size); tok = strtok(s1, s2); double a = atof(tok); tok = strtok(NULL, s2); // 文字列 strがヌル終端されていない場合、tok もヌル終端されてない状態になる。 double b = atof(tok); // atofは、ヌル終端ありきの動作。 return (a + b / 60.0 ); }