我有以下問題:從套接字中,我收到一個十六進制字串,然后將其轉換為位元組陣列并將其保存到 uint8_t 陣列中。這是轉換函式(它有效):
static size_t convert_hex(uint8_t *dest, size_t count, const char *src)
{
size_t i = 0;
int value;
for (i; i < count && sscanf(src i * 2, "%2x", &value) == 1; i )
{
dest[i] = value;
}
return i;
}
然后,我將此位元組陣列重新轉換為十六進制字串,只知道轉換是否正確。轉換是正確的,因為從套接字接收到的十六進制字串(在轉換為位元組陣列之前),在從 uint8_t 轉換為十六進制字串之后是相同的字串:這里是流程 -> HEX_STRING -> UINT8_T ARRAY -> HEX_STRING
static size_t convert_hex_inv(char *dest, size_t count, const uint8_t *src)
{
size_t i = 0;
for (i = 0; i < count && sprintf(dest i * 2, "X", src[i]) == 2; i )
;
return i;
}
無論如何,當我列印位元組陣列時,結果似乎很奇怪,因為在我看來它太短了。問題出在哪兒?它在印刷品中嗎?
n = recvfrom(sockfd, (char *)buffer, 1024,
MSG_WAITALL, ( struct sockaddr *) &cliaddr,
&len);
buffer[n] = '\0';
printf("[SKT]\tHex String: %s. Message Type: %c\n", buffer, buffer[3]);
uint8_t uint8_payload[2048];
uint16_t uint_size = convert_hex(uint8_payload, n, buffer);
printf("[SKT]\tByte Array: %" PRIu8 "\n", uint8_payload);
char hex_array[n];
convert_hex_inv(hex_array, uint_size, uint8_payload);
printf("[SKT]\tHex String: %s\n", hex_array);
}
結果是:
[2021-11-11 12:02:23.410] [SKT] Hex String : 0201000000A8C0000000540000000000000000000000000446E88CEB36E7806FFEFFE000192E5B0F001C029FFFE30101F7D0000C003C000D000401D1C0FF6C3C80
[2021-11-11 12:02:23.410] [SKT] Byte Array: 4152851276 -> **THIS VALUE IS QUITE STRANGE**
[2021-11-11 12:02:23.410] [SKT] Hex String: 0201000000A8C0000000540000000000000000000000000446E88CEB36E7806FFEFFE000192E5B0F001C029FFFE30101F7D0000C003C000D000401D1C0FF6C3C80
uj5u.com熱心網友回復:
隨著宣告
printf("[SKT]\tByte Array: %" PRIu8 "\n", uint8_payload);
您不列印 array 的內容uint8_payload。相反,您將指標列印到其第一個元素(請記住,uint8_payload它將衰減到&uint8_payload[0])。
要列印所有需要回圈列印的元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/356324.html
上一篇:使用for回圈反轉C中的字串?
下一篇:在編譯時以二進制形式隱藏字串?
