我正在寻找一个由十六进制值组成的二进制字符串......我了解到 sprintf 不是完成此任务的正确方法。我有一个真正简单的 gui 来收集需要发送到设备的配置设置。这些值可以带符号并且始终是数字。我有一组值,例如:
#define PKTHEAD 0xA5
#define VALONE 0xA0
#define VALTWO 0xA1
#define VALTHREE 0xA2
#define PKTTAIL 0x5A
signed int val1 = 10000; //0x2710
signed int val2 = -84; //0xFFAC
signed int val3 = -175001 //0xFFFD5467
我的最终目标是有一个类似于“PKTHEAD|PKTHEAD|PKTHEAD|VALONE|val1|VALTWO|val2|VALTHREE|val3|PKTTAIL|PKTTAIL|PKTTAIL”的数据包,十六进制表示为 A5A5A5A000002710A1FFFFFFACA2FFFD54675A5A5A。
现在我正在这样做:
int main(int argc, char *argv[])
{
int numBytes = 10;
signed char *tmp;
signed char *pyld;
pyld = calloc(numBytes, sizeof(char));
signed int val1 = 10000; //0x2710
signed int val2 = -84; //0xFFAC
signed int val3 = -175001 //0xFFFD5467
tmp = pyld;
*(tmp + (numBytes - 1)) = DACHEAD;
*(tmp + (numBytes - 2)) = DACHEAD;
*(tmp + (numBytes - 3)) = DACHEAD;
*(tmp + (numBytes - 4)) = VALONE;
*(tmp + (numBytes - 5)) = val1;
printf("payload = %hhx%hhx%hhx%hhx%hx%hx%hhx%hx\n", pyld[9], pyld[8], pyld[7], pyld[6], pyld[5], pyld[4], pyld[3], pyld[2], pyld[1], pyld[0]);
}
输出为:“有效载荷 = a5a5a5a0100a1ffac”
我的 val1 值不正确,我想知道是否有更好的方法来组成这个数据包。我应该做位移吗?
任何帮助是极大的赞赏。
谢谢!