Đối với một tiêu chuẩn truyền thông được chỉ định RTCM SC104 3.1, tôi cần chia dữ liệu qua byte thành một cặp đoạn dữ liệu 12 bit. Vì vậy, đối với một tin nhắn nhất định, tôi cần phải đặt số loại tin nhắn trên byte đầu tiên và một nửa của byte thứ hai. Sau đó, tôi cần phải bắt đầu một số nguyên ID trên một nửa byte thứ hai và tiếp tục đến byte thứ ba. Kiểu mẫu này tiếp tục đến cuối của thông điệp, cạo xuống các số nguyên khác trong 20bit, 5bit, và các kích cỡ khác về cơ bản là cắt các số 0 thường sẽ điền vào cuối MSB của các giá trị số nguyên.Làm cách nào để truy cập một byte đơn nguyên?
Tôi chưa thấy định nghĩa rõ ràng nhưng tôi cho rằng nó phải đi ra ngoài theo thứ tự byte mạng vì vậy trước khi sao chép bit, tôi sẽ phải đảo ngược số nguyên trong bộ nhớ. Tôi vẫn còn khá mới để cpp và tôi tự hỏi làm thế nào để tôi nhận được để các byte cá nhân tạo nên một số nguyên trong bộ nhớ? Nếu tôi có thể truy cập các byte sau đó tôi có thể sử dụng bitwise hoặc để tách các bit từ 2 byte lên một cho tin nhắn.
Đây là sự khởi đầu của việc xây dựng một thông điệp trước khi thêm dữ liệu:
//build message 1002 gps 00111110 1010
char buf1002[BUFFERSIZE];
buf1002[0] = 0x3E; //00111110
buf1002[1] = 0xA0; //10100000
//ref station id 12 bits of 16
//ex unsigned short m = 1100;
//m would be byte2 00000100 byte1 01001100
//buf1002[1] would be 10100100
//buf1002[2] would be 01001100
//reverse bit order for network after building?
Trạm tham chiếu sẽ được từ hiện tượng chập mạch, do đó, một số nguyên 2 byte unsigned. Vì vậy, làm thế nào để tôi đi về đọc một byte duy nhất từ nó? Tôi có bắt đầu với con trỏ vị trí bộ nhớ không? Nếu vậy thì sao?
Mọi trợ giúp sẽ được đánh giá cao.
Đọc câu trả lời đầu tiên tại đây http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c –
* "Trạm tham chiếu sẽ là từ một unsigned ngắn, do đó, một số nguyên 2 byte. "* Một ngắn không phải là cần thiết để được hai byte (mặc dù đó là bởi đến nay trường hợp phổ biến nhất), nó được yêu cầu phải được tại * ít nhất * 16 bit. Bạn có thể sử dụng 'uint16_t' để buộc vấn đề. – dmckee