C言語開発メモ
/* 日付けを時刻構造体に渡す関数サンプル */
#include <string.h>
#include <time.h>
#define STRING_MAX 256
/* YYYY-MM-DDThh:mm:ss を仮定 */
int date_to_struct(char *date, struct tm *gt){
/* 日付を分解 */ // いろいろ力技
char year[STRING_MAX];
char month[STRING_MAX];
char day[STRING_MAX];
char hour[STRING_MAX];
char min[STRING_MAX];
char sec[STRING_MAX];
/* YYYY-MM-DDThh:mm:ss をそれぞれの要素に分割 */
/* まずそれぞれ分割した文字列に切る */
sprintf(year,"%1c%1c%1c%1c",date[0],date[1],date[2],date[3]);
sprintf(month,"%1c%1c",date[5],date[6]);
sprintf(day,"%1c%1c",date[8],date[9]);
sprintf(hour,"%1c%1c",date[11],date[12]);
sprintf(min,"%1c%1c",date[14],date[15]);
sprintf(sec,"%1c%1c",date[17],date[18]);
/* 日付構造体へ */
//struct tm dat;
//struct tm *gt = &dat; /* 初期化 */
gt->tm_year = atoi(year)-1900;
gt->tm_mon = atoi(month)-1; // Jan = 0
gt->tm_mday = atoi(day); // days of month 1st = 1
gt->tm_hour = atoi(hour);
gt->tm_min = atoi(min);
gt->tm_sec = atoi(sec);
gt->tm_isdst = -1; // サマータイムフラグ off
return 0;
}
math.hを使うときの注意
コンパイル時に
gcc hogehoge.c -lm
の数学関数リンクを表す -lm を忘れずに!めんどくさい!
しかも最後につけた方が良い様子。よくわからん!
構造体を含むインクルードファイルの作成例:
例: rad_corr.hというインクルードファイルを作ったら
<rad_corr.h>
======================================
#ifndef RAD_CORR_H
#define RAD_CORR_H
typedef struct radcorr_info *radcorr_info; /* typedefの記述がここで必要かどうかは知らない */
struct radcorr_info
{
char *radcorr_coeff_file_name;
char *defect_pixel_file_name;
char *launch_date;
unsigned short L1B_dead_pixel_value;
unsigned short L1B_saturated_pixel_value;
double L1B_scale_factor;
double L1B_offset;
}; /* ";" 忘れずに */
int rad_correct(
unsigned char *L1A_header,
unsigned short **L1A_image,
unsigned short **L1B_image,
struct radcorr_info *radcorr_info /* <- "struct" をちゃんと書く*/
);
#endif
======================================
呼び出すとき
<メイン関数>
===========================================
#include <stdio.h>
#include "rad_corr.h"
int main(void){
int error=0;
unsigned char *L1A_header;
unsigned short **L1A_image;
unsigned short **L1B_image;
/* 各値の代入など*/
struct radcorr_info dat; /* <-一回ダミー構造体を宣言。構造体にアドレスを与えるために必要?*/
struct radcorr_info *radcorr_info = &dat; /*ダミー構造体のアドレスを代入*/
/* 各メンバの値の代入など*/
error = rad_correct(L1A_header,L1A_image, L1B_image, radcorr_info);
return 0;
}
===========================================
<計算用の関数>
===========================================
#include <stdio.h>
#include "rad_corr.h"
int rad_correct( /* インクルードファイルに書いた定義のとおり書く */
unsigned char *L1A_header,
unsigned short **L1A_image,
unsigned short **L1B_image,
struct radcorr_info *radcorr_info
){
/* 構造体のメンバを呼び出す */
printf("L1B scaling factor: %f\n", radcorr_info->L1B_scale_factor);
return 0;
}
===========================================