#include "global.h" #ifdef _WIN32 #include "../system/windows_include.h" #else #include #endif #include #include IUINT16 rand_range_16(IUINT16 min, IUINT16 max) { if (min > max) { // 如果参数传反了,交换 IUINT16 temp = min; min = max; max = temp; } return min + rand() % (max - min + 1); } void itimeofday(long *sec, long *usec) { #if defined(__unix) struct timeval time; gettimeofday(&time, NULL); if (sec) *sec = time.tv_sec; if (usec) *usec = time.tv_usec; #else static long mode = 0, addsec = 0; BOOL retval; static IINT64 freq = 1; IINT64 qpc; if (mode == 0) { retval = QueryPerformanceFrequency((LARGE_INTEGER*)&freq); freq = (freq == 0)? 1 : freq; retval = QueryPerformanceCounter((LARGE_INTEGER*)&qpc); addsec = (long)time(NULL); addsec = addsec - (long)((qpc / freq) & 0x7fffffff); mode = 1; } retval = QueryPerformanceCounter((LARGE_INTEGER*)&qpc); retval = retval * 2; if (sec) *sec = (long)(qpc / freq) + addsec; if (usec) *usec = (long)((qpc % freq) * 1000000 / freq); #endif } /* get clock in millisecond 64 */ IINT64 iclock64(void) { long s, u; IINT64 value; itimeofday(&s, &u); value = ((IINT64)s) * 1000 + (u / 1000); return value; } IUINT32 iclock() { return (IUINT32)(iclock64() & 0xfffffffful); } int check_cycle_0_9(const char *str, int len) { if (len <= 0) return false; for (int i = 1; i < len; i++) { // 上一个字符 char prev = str[i - 1]; char expected = (prev == '9') ? '0' : prev + 1; if (str[i] != expected) { return i; } } return 0; } void print_hex(const char* prefix, const uint8_t* data, int len, const char* suffix) { printf("%s", prefix); for (int i = 0; i < len; ++i) { printf("%02X ", data[i]); // %02X: 打印两位十六进制数,前面补零,X为大写字母 } printf("%s", suffix); }