将字节数组转换为字符串以发布到系统日志

标签 c arrays string hex

我有一个如下所示的数组:

u_int8_t arr[10] = {0x02, 0x0A, 0x01 0x01, 0x00, 0x00, 0x01, 0x00, 0x09, 0x03};

目前我有一个函数可以将此数组打印到终端,它的工作原理如下:

void dump_packet(void* packet, int len)
{
u_int8_t* bytes = (u_int8_t*)packet;
int i = 0;
while (i < len){
    printf("%02X-", bytes[i++]);
    fflush(stdout);
}

printf("|");
}

所以在屏幕上我看到:02-0A-01-01-00-00-01-00-09-03-|。我想知道如何更改此函数,以便将数据包存储为上述格式的字符串?我想这样做,以便我可以将收到的数据包写入syslog

最佳答案

我采纳了 Joachim Pileborg 的建议,并编辑了我的 dump_packet 函数,如下所示:

void dump_packet(void* packet, int len)
{
u_int8_t* bytes = (u_int8_t*)packet;
int i = 0;
char hex[10];
char hexstring[4*MAXBUFSIZE] = "";


while (i < len){
    sprintf(hex, "%02X-", bytes[i]);
    strcat(hexstring, hex);
    printf("%02X-", bytes[i++]);
    fflush(stdout);
}
printf("|");
syslog(LOG_INFO, "%s", hexstring);
}

关于将字节数组转换为字符串以发布到系统日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20120849/

相关文章:

c - 线程问题

c - 定义宏时do while(0)有什么用?

c# - 如何用正则表达式替换包含圆括号(圆括号)的文本?

swift - 如何根据 RTL/LTR 连接字符串

Java : Replace a specific char in string to it is index

c11 标准 6.7.2.3 标签 特定类型的内容最多只能定义一次

c - procs、fork() 和互斥体

使用 `memmove` 循环移动数组

java - 解析没有名称的json数组

带有 DateTime[] 的 C# 数组