gpt4 book ai didi

在C中从十六进制字符串转换为字节数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:24 24 4
gpt4 key购买 nike

我在 C 中的 TCP 套接字服务器和客户端之间发送字节数组。我发送的信息是一系列整数。

我有它的工作,但因为我不太熟悉 C,我想知道是否有人可以提出更好的解决方案,或者至少看看并告诉我我不是太疯狂或使用过时的代码我在做什么。

首先,我生成一个随机十进制值,假设为“350”。我需要通过套接字连接将其作为十六进制字节数组传输。它在另一端被解码回其十进制值。

到目前为止,我是这样将它转换为十六进制的:

unsigned char hexstr[4];
sprintf(hexstr, "%02X", numToConvert); \\ where numToConvert is a decimal integer value like 350

此时,我在 hexstr 中有一个类似于“15E”的字符串(同样,使用 350 的十六进制值作为示例)。

现在,我需要将其存储在一个字节数组中,使其看起来类似于:myArray = {0X00, 0X00, 0X01, 0X5E};

显然我不能只写:myArray = {0X00, 0X00, 0X01, 0X5E} 因为值每次都会不同,因为每次都会生成一个新的随机数。

目前,我是这样做的(伪代码,因为字符串操作部分无关紧要但很长):

lastTwoChars = getLastTwoCharsFromString(hexstr); // so lastTwoChars would now contain "5E"

然后(实际代码):

sscanf(lastTwoChars, "%0X", &res); // now the variable res contains the byte representation of lastTwoChars, is my understanding

然后最后:

myArray[3] = res;

然后,我从 hexstr 中取出接下来最右边的两个字符(再次使用示例值“15E”,这将是“01”——如果只有 1 个字符,在本例中“1”是从“15E”中取出“5E”后只剩下一个字符,我在左边添加 0 以填充)并使用 sscanf 以相同的方式转换它,然后插入到 myArray[2] 中。对 myArray[1] 和 myArray[0] 重复上述步骤。

然后我使用 write() 发送数组。

所以,经过几个小时的努力,这一切都奏效了……但是因为我不太使用 C,所以我一直怀疑我在这一切中遗漏了什么。任何人都可以评论我正在做的事情是否看起来不错,或者有什么明显的我使用不当或忽略使用?

最佳答案

#include <stdio.h>
#include <limits.h>

int main(){
unsigned num = 0x15E;//num=350
int i, size = sizeof(unsigned);
unsigned char myArray[size];
for(i=size-1;i>=0;--i, num>>=CHAR_BIT){
myArray[i] = num & 0xFF;
}
for(i=0;i<size;++i){
printf("0X%02hhX ", myArray[i]);//0X02X
}
printf("\n");
return 0;
}

关于在C中从十六进制字符串转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23071138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com