Vì vậy, tôi có 3 số. Một là char
và hai số còn lại là int16_t
(còn được gọi là short
s, nhưng theo bảng tôi thấy quần short không đáng tin cậy là 16 bit).Ghép số nhị phân có độ dài khác nhau
Tôi muốn ghép chúng lại với nhau. Vì vậy, nói rằng các giá trị của chúng là:
10010001
1111111111111101
1001011010110101
Tôi muốn kết thúc với một long long
chứa:
1001000111111111111111011001011010110101000000000000000000000000
Sử dụng một số giải pháp tôi đã tìm thấy trực tuyến, tôi c ame up with this:
long long result;
result = num1;
result = (result << 8) | num2;
result = (result << 24) | num3;
Nhưng nó không hoạt động; nó mang lại cho tôi những con số rất kỳ lạ khi nó được giải mã.
Trong trường hợp có một vấn đề với mã giải mã của tôi, ở đây nó là:
char num1 = num & 0xff;
int16_t num2 = num << 8 & 0xffff;
int16_t num3 = num << 24 & 0xffff;
gì đang xảy ra ở đây? Tôi nghi ngờ nó đã làm với kích thước của một long long
, nhưng tôi không thể hoàn toàn quấn quanh đầu của tôi và tôi muốn phòng cho số lượng nhiều hơn trong nó sau này.
Tôi sẽ xem xét điều đó, nhưng tôi có thể nghĩ về một cách tiếp cận khác (đặt các số ở bên phải thay vì bên trái?) Vì các số đơn giản là nhanh nhất. – Cheezey
Anh ấy đang sử dụng 'long long', không phải' long'. 'long long' có thể lưu trữ ít nhất 64 bit, anh ta chỉ cần 40. –