//
|
// Created by YY on 2020/1/7.
|
//
|
|
#include "xconvert.h"
|
#include <cstdint>
|
#include <cstring>
|
#include <vector>
|
#include <string>
|
|
using namespace std;
|
|
#define SECONDS_PER_MINUTE 60
|
#define SECONDS_PER_HOUR 3600
|
#define SECONDS_PER_DAY (86400L)
|
|
#define MINUTES_PER_HOUR 60
|
#define MINUTES_PER_DAY 1440
|
|
#define HOURS_PER_DAY 24
|
|
#define DAYS_PER_WEEK 7
|
#define DAYS_PER_YEAR 365
|
|
double ConvertKMh2Ms(int kmh)
|
{
|
return ((double)kmh) * 1000.0 / 3600.0;
|
}
|
|
double ConvertMs2KMh(double ms)
|
{
|
return ms * 3600.0 / 1000.0;
|
}
|
|
void ConvertPhoneNum(uint8_t *dst, int length, const char *src)
|
{
|
int p = length - 1;
|
int q = strlen(src) - 1;
|
|
memset(dst, 0, length);
|
|
while (q >= 0) {
|
dst[p] = src[q] - '0';
|
q--;
|
if (q >= 0) {
|
dst[p] |= (src[q] - '0')<<4;
|
p--;
|
q--;
|
}
|
}
|
}
|
|
void ConvertHex2String(char *str, const uint8_t *hex, int length)
|
{
|
const char HEX[] = "0123456789ABCDEF";
|
int j = 0;
|
|
for (int i = 0; i < length; ++i) {
|
str[j++] = HEX[(hex[i]>>4)&0x0F];
|
str[j++] = HEX[hex[i]&0x0F];
|
}
|
str[j++] = 0;
|
}
|
|
void ConvertString2Hex(uint8_t *hex, int length, const char *str)
|
{
|
if (length < strlen(str)/2) return;
|
|
for (int i = 0, j = 0; i < strlen(str); ++i, ++j) {
|
if (str[i] >= '0' && str[i] <= '9') {
|
hex[j] = str[i] - '0';
|
} else if (str[i] >= 'A' && str[i] <= 'F') {
|
hex[j] = 10 + str[i] - 'A';
|
} else if (str[i] >= 'a' && str[i] <= 'f') {
|
hex[j] = 10 + str[i] - 'a';
|
}
|
hex[j] <<= 4;
|
i++;
|
if (str[i] >= '0' && str[i] <= '9') {
|
hex[j] |= str[i] - '0';
|
} else if (str[i] >= 'A' && str[i] <= 'F') {
|
hex[j] |= 10 + str[i] - 'A';
|
} else if (str[i] >= 'a' && str[i] <= 'f') {
|
hex[j] |= 10 + str[i] - 'a';
|
}
|
}
|
}
|
|
const int LibTimeDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
|
|
static inline bool TimeYearIsLeap(int year)
|
{
|
if ((year % 4) || year == 2100)
|
return false;
|
else
|
return true;
|
}
|
|
uint32_t TimeMakeComposite(int year, int month, int day, int hour, int minute, int second)
|
{
|
int i;
|
uint32_t totalSeconds;
|
int daysThisYear;
|
|
totalSeconds = second;
|
totalSeconds += minute*SECONDS_PER_MINUTE;
|
totalSeconds += hour*SECONDS_PER_HOUR;
|
|
daysThisYear = day - 1;
|
if (TimeYearIsLeap(year) && month>2)
|
daysThisYear += 1;
|
|
for (i = 0; i<(month - 1); i++)
|
daysThisYear += (int)LibTimeDays[i];
|
|
for (i = 2000; i<year; i++) {
|
daysThisYear += 365;
|
if (TimeYearIsLeap(i))
|
daysThisYear += 1;
|
}
|
totalSeconds += daysThisYear * SECONDS_PER_DAY;
|
return totalSeconds;
|
}
|
|
uint32_t TimeMakeComposite(int hour, int minute, int second, int msecond)
|
{
|
return (hour*SECONDS_PER_HOUR + minute*SECONDS_PER_MINUTE + second) * 1000 + msecond;
|
}
|
|
/*********************************************************
|
* TIME1 - TIME2: msecond
|
* @param hour1
|
* @param minute1
|
* @param second1
|
* @param msecond1
|
* @param hour2
|
* @param minute2
|
* @param second2
|
* @param msecond2
|
* @return
|
*/
|
uint32_t TimeGetDiff(int hour1, int minute1, int second1, int msecond1, int hour2, int minute2, int second2, int msecond2)
|
{
|
return (TimeMakeComposite(hour1, minute1, second1, msecond1) + SECONDS_PER_DAY * 1000 -
|
TimeMakeComposite(hour2, minute2, second2, msecond2)) % (SECONDS_PER_DAY * 1000);
|
}
|
|
vector<string> split(string str, string pattern)
|
{
|
string::size_type pos;
|
vector<string> result;
|
str += pattern;
|
|
int size=str.size();
|
|
for(int i=0; i<size; i++) {
|
pos=str.find(pattern,i);
|
if(pos<size) {
|
string s=str.substr(i,pos-i);
|
result.push_back(s);
|
i=pos+pattern.size()-1;
|
}
|
}
|
return result;
|
}
|