Files
CPP_Core/Core/transmit_protocol/global.cpp
T
2026-06-16 10:56:40 +08:00

85 lines
2.0 KiB
C++

#include "global.h"
#ifdef _WIN32
#include "../system/windows_include.h"
#else
#include <sys/time.h>
#endif
#include <float.h>
#include <stdlib.h>
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);
}