#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
double e_change_to_(char *p)
{
   double b=0;
   int f=1,s=-1,i,exp=0;
   if(*p=='-')f=-1,p++;
   while(*p!='e'&&*p!='E') {
      if(*p=='.'){
         s=1;
      }else{
         if(s<0){
              b=b*10+*p-48;
         } else {
             if(*p=='.')p++;
             s*=10;
             b+=(double)(*p-48)/s;
         }      
      }
      p++;
   }
   b*=f;
   if(*(++p)=='-'){
      s=-1,p++;
   }else{
     if(*p=='+')
         p++,s=1;
     else 
         s=1;
   }
   do exp=exp*10+*p-48;while(*(++p));

   if(s>0){
      for(i=0;i<exp;i++)b*=10;
   }else{
    for(i=0;i<exp;i++)b/=10;
   }
   return b;
}



//CRC 码表低字节
unsigned char ykc_gabyCRCLo[] =
{
	0x00,0xc0,0xc1,0x01,0xc3,0x03,0x02,0xc2,0xc6,0x06,
	0x07,0xc7,0x05,0xc5,0xc4,0x04,0xcc,0x0c,0x0d,0xcd,
	0x0f,0xcf,0xce,0x0e,0x0a,0xca,0xcb,0x0b,0xc9,0x09,
	0x08,0xc8,0xd8,0x18,0x19,0xd9,0x1b,0xdb,0xda,0x1a,
	0x1e,0xde,0xdf,0x1f,0xdd,0x1d,0x1c,0xdc,0x14,0xd4,
	0xd5,0x15,0xd7,0x17,0x16,0xd6,0xd2,0x12,0x13,0xd3,
	0x11,0xd1,0xd0,0x10,0xf0,0x30,0x31,0xf1,0x33,0xf3,
	0xf2,0x32,0x36,0xf6,0xf7,0x37,0xf5,0x35,0x34,0xf4,
	0x3c,0xfc,0xfd,0x3d,0xff,0x3f,0x3e,0xfe,0xfa,0x3a,
	0x3b,0xfb,0x39,0xf9,0xf8,0x38,0x28,0xe8,0xe9,0x29,
	0xeb,0x2b,0x2a,0xea,0xee,0x2e,0x2f,0xef,0x2d,0xed,
	0xec,0x2c,0xe4,0x24,0x25,0xe5,0x27,0xe7,0xe6,0x26,
	0x22,0xe2,0xe3,0x23,0xe1,0x21,0x20,0xe0,0xa0,0x60,
	0x61,0xa1,0x63,0xa3,0xa2,0x62,0x66,0xa6,0xa7,0x67,
	0xa5,0x65,0x64,0xa4,0x6c,0xac,0xad,0x6d,0xaf,0x6f,
	0x6e,0xae,0xaa,0x6a,0x6b,0xab,0x69,0xa9,0xa8,0x68,
	0x78,0xb8,0xb9,0x79,0xbb,0x7b,0x7a,0xba,0xbe,0x7e,
	0x7f,0xbf,0x7d,0xbd,0xbc,0x7c,0xb4,0x74,0x75,0xb5,
	0x77,0xb7,0xb6,0x76,0x72,0xb2,0xb3,0x73,0xb1,0x71,
	0x70,0xb0,0x50,0x90,0x91,0x51,0x93,0x53,0x52,0x92,
	0x96,0x56,0x57,0x97,0x55,0x95,0x94,0x54,0x9c,0x5c,
	0x5d,0x9d,0x5f,0x9f,0x9e,0x5e,0x5a,0x9a,0x9b,0x5b,
	0x99,0x59,0x58,0x98,0x88,0x48,0x49,0x89,0x4b,0x8b,
	0x8a,0x4a,0x4e,0x8e,0x8f,0x4f,0x8d,0x4d,0x4c,0x8c,
	0x44,0x84,0x85,0x45,0x87,0x47,0x46,0x86,0x82,0x42,
	0x43,0x83,0x41,0x81,0x80,0x40
};

//CRC 码表高字节
unsigned char ykc_gabyCRCHi[] =
{
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
	0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,
	0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x00,0xc1,
	0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x00,0xc1,
	0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,
	0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,
	0x81,0x40,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,
	0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x01,0xc0,
	0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
	0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
	0x01,0xc0,0x80,0x41,0x00,0xc1,0x81,0x40,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40,0x00,0xc1,0x81,0x40,
	0x01,0xc0,0x80,0x41,0x01,0xc0,0x80,0x41,0x00,0xc1,
	0x81,0x40,0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,
	0x00,0xc1,0x81,0x40,0x01,0xc0,0x80,0x41,0x01,0xc0,
	0x80,0x41,0x00,0xc1,0x81,0x40
};

unsigned short YKC_Platform_AddChecksum(unsigned char *pData,int len)
{
	unsigned char byCRCHi = 0xff;
	unsigned char byCRCLo = 0xff;
	unsigned char byIdx;
	unsigned short crc;
	
	while(len--)
	{
		byIdx = byCRCHi ^* pData++;
		byCRCHi = byCRCLo ^ ykc_gabyCRCHi[byIdx];
		byCRCLo = ykc_gabyCRCLo[byIdx];
	}
	crc = (byCRCHi << 8) + byCRCLo;
	return crc;
}

uint16_t PY_CRC_16_T8_X25(uint8_t *di, uint32_t len)
{
	uint16_t crc_poly = 0x1021;  //X^16+X^12+X^5+1 total 16 effective bits without X^16. 
	uint16_t data_t = 0; //CRC register

	uint8_t cdata[len];
	for(uint32_t j=0;j<len;j++)
	{
		cdata[j] = 0;
		for(uint8_t m=0; m<=7; m++)
		{
			cdata[j] |= ( ( di[j]>>(7-m) ) & 1 ) << m;
		}
	}

	cdata[0] ^= 0xff; cdata[1] ^= 0xff;

    for(uint32_t i = 0; i < len; i++)
    {
    	data_t ^= cdata[i]<<8; //8-bit data

        for (uint8_t j = 0; j < 8; j++)
        {
            if (data_t & 0x8000)
            	data_t = (data_t << 1) ^ crc_poly;
            else
            	data_t <<= 1;

        }
    }

    uint16_t i_data_t = 0;

    for(uint8_t n=0; n<=15; n++)
    {
   	 i_data_t |=  ( ( data_t>>(15-n) ) & 1 ) << n;
    }

    return i_data_t ^ 0xFFFF;
}



#include<stdio.h>
#include<string.h>
#include <stdlib.h>
#include <unistd.h>

#define MASK "255.255.0.255."
int dealMask(int x,int *buf,int ret){
        int i = ret * 8;
        while( (x/2) !=0 )
        {
                buf[i-1] = x%2;
                x = x/2;
                i--;
        }
        buf[i-1] = x%2;

        return i;

}
int transer(char *mark){
        char temp[8] = {0};
        int buf[32] = {0};
        char *str  = temp;
        char *head = mark;
        int count = 0;
        int ret = 1;
        int i = 0;
        int j = 0;
        while(*head != '\0'){
                *str = *head;
                if(*(head+1) == '.'|| *(head+1)== '\0'){
                        head = head +2;
                        dealMask(atoi(temp),buf,ret);
                        ret++;
                        memset(temp,0,sizeof(temp));
                        str = temp;
                        continue;
                }
                str++;
                head++;

        }
        for(i = 1;i <33;i++){
                if(buf[i-1] == 1){
                        j++;
                }
               // printf("%d",buf[i-1]);
               // if((i%8) == 0){
               //         printf("\n");
               // }
        }
        printf("%d\n",j);

}
 

#include <sys/types.h>
#include <dirent.h>
#include <time.h>

uint32_t return_7_day_time(void)
{
    char data_str[128];
    time_t now;  // 声明time_t类型变量
    now = time(NULL);  // 获取系统日期和时间
    now = now - 7 * 24 * 60 * 60;
    struct tm *t = localtime(&now); //获取当地日期和时间
    snprintf(data_str, sizeof(data_str), "%d%02d%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday);

    printf("\n----------return_7_day_time[%s]\n", data_str);
    return atoi(data_str);
}

#define MAX_FILENAME_LENGTH 512U

int dirWalk(char* dirpath)
{
	// Bad address
	if (!dirpath || !strlen(dirpath))
	{
		return 0;
	}
	
	//  获得目录结构体指针
	DIR* pDir = opendir(dirpath);
	if (pDir == NULL)
	{
		return 0;
	}

	// 遍历该目录下文件，遇到目录则递归遍历
	int err = 0;
	struct dirent* ent;
	while (ent = readdir(pDir))
	{
		// 目录，递归
		if (ent->d_type == DT_DIR)
		{			
			if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
			{
				continue;
			}
			// 判断目标路径是否过长
			if (strlen(dirpath) + ent->d_reclen + 1 >= MAX_FILENAME_LENGTH)
			{
				return 0;
			}
			// 拼接出目标目录的路径
			char nextDirPath[MAX_FILENAME_LENGTH];
			sprintf(nextDirPath, "%s/%s", dirpath, ent->d_name);
			printf("nextDirPath: %s\n", nextDirPath);
			
			// 递归访问该目录
			err = dirWalk(nextDirPath);
			memset(nextDirPath, 0, MAX_FILENAME_LENGTH);
			if (err != 0) break;
			
		}
		// 普通文件
		else if (ent->d_type == DT_REG)
		{
			printf(">> %s\n", ent->d_name);
			if (err != 0) break;
		}
	}

	closedir(pDir);
	return err;
}



int main()
{//0xb7,0x59,0x01,0x03,0x2a,0x00,


  

    
    char floatNum1[] = {0x30,0x75,0x00,0x00};
    char floatNum2[] = { 0x00,0x00,0x75,0x30};
   // dirWalk("/home/t/2024/202404/swd-pro");
   
   printf("\n ----20241218---- [%f][%f][%ld][%.08llx][%.08llx]\n", *(((float*)floatNum1)), *(((float*)floatNum2)), return_7_day_time(), atoi("888884294901760"), strtoul("88884294901760", NULL, 10));     
   
      //  transer(MASK);
       return 0;





//------------------------------------------------------------------



   printf("%d,%d,%f\r\n", atoi("025°36'"), atoi("36'23\""), atof("23.3659\"   E"));

   char tmp[] = {0x01,0x03,0x2a,0x00,0x70,0x74,0x30,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4f,0x07};
 //  char floatNum1[] = {0x40,0x39,0x44,0xd9,0xc6,0x5e,0xb8,0x61};
   char floatNum20[] = { 0x61,0xb8,0x5e,0xc6,0xd9,0x44,0x39,0x40};
   char floatNum21[] = { 0x82,0xf9,0xf1,0xb8,0x24,0x95,0x5b,0x40};
   char floatNum22[] = { 0x1b,0x2f,0xdd,0x24,0x06,0x75,0x63,0x40};
 
 
   //char floatNum1[] = {0x40,0x39,0x44,0xd9};
   //char floatNum2[] = { 0x61,0xb8,0x5e,0xc6};

  // printf("%04x\n",YKC_Platform_AddChecksum(tmp, sizeof(tmp)));
  printf("%04x--------[%lf][%lf][%lf]\n",PY_CRC_16_T8_X25(tmp, sizeof(tmp)),  *(((double*)floatNum20)),  *(((double*)floatNum21)),  *(((double*)floatNum22)));
   //printf("%04x--------[%lf][%lf]\n",PY_CRC_16_T8_X25(tmp, sizeof(tmp)), *(((float*)floatNum1)), *(((float*)floatNum2)));
   char *p="-2000000000000.2963e-2";
   printf("%0.14f\n",e_change_to_(p));
  
  return 0;
}
