16 진수 값으로 구성된 이진 문자열을 작성하려고합니다 ... sprintf가이를 수행하는 올바른 방법이 아니라는 것을 배웠습니다. 장치를 보내야하는 구성 설정을 수집하는 간단한 GUI가 있습니다. 값은 서명 될 수 있으며 항상 숫자입니다. 내가 좋아하는 값의 집합이 있습니다C - char 및 int를 사용하여 패킷 만들기
#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 "이며 16 진수 표현은 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과 값이 잘못하고 구성하는 더 나은 방법이 있는지 궁금 해요 이 패킷. 대신 비트 교대를해야합니까?
도움을 주시면 대단히 감사하겠습니다.
감사합니다.