Tôi có một chương trình c bên dưới, tôi muốn gửi một tin nhắn 32 bit theo thứ tự cụ thể Eg.0x00000001.Tại sao đầu ra trông như thế này?
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <stdint.h>
struct test
{
uint16_t a;
uint16_t b;
};
int main(int argc, char const *argv[])
{
char buf[4];
struct test* ptr=(struct test*)buf;
ptr->a=0x0000;
ptr->b=0x0001;
printf("%x %x\n",buf[0],buf[1]); //output is 0 0
printf("%x %x\n",buf[2],buf[3]); //output is 1 0
return 0;
}
Sau đó, tôi thử nghiệm bằng cách in ra các giá trị trong mảng char. Tôi nhận được đầu ra trong các ý kiến trên. Không nên đầu ra là 0 0 và 0 1? vì [3] là byte cuối cùng? Có điều gì tôi đã bỏ lỡ không?
Cảm ơn!
vậy thông báo trông như thế nào khi tôi gửi bằng sendto() từ socket.h? Nó sẽ là 0x00000001 hoặc 0x00000100? – kun
@cjk: bạn cần phải sử dụng 'htons' để gửi, nó phụ thuộc vào việc biết chính xác endianness cho bạn. – Vlad