01/10/2018, 11:34

Đọc file theo byte

Tình hình là em ghi vào file theo byte nhưng không biết đọc từ file đó kiểu gì
Code ghi file:

> #include stdio.h>
> #include stdint.h>
> struct udphdr {
>         uint16_t uh_sport;
>         uint16_t uh_dport;
>         uint16_t uh_ulen;
>         uint16_t uh_sum;
> };

> int main(){
>         FILE * fp;
>         char udphdr_str[4];
>         struct udphdr *uhdr;
>         int sport, dport, ulen, checksum;
>         uhdr = (struct udphdr *)udphdr_str;
>         
>         printf("Source port: ");
>         scanf("%d", &sport);
>         uhdr->uh_sport = sport;
>         printf("Destination port: ");
>         scanf("%d", &dport);
>         uhdr->uh_dport = dport;
>         printf("Length: ");
>         scanf("%d", &ulen);
>         uhdr->uh_ulen = ulen;
>         printf("Checksum: ");
>         scanf("%d", &checksum);
>         uhdr->uh_sum = checksum;
>         fp = fopen ("pkt_hdr.txt", "w");
>         fwrite(udphdr_str,1,4,fp);
>         fclose(fp);
> }

Khi đó khi nhập số thì trong file sẽ ghi thành từng byte kiểu như

Ò^Dè^@

Bây giờ em muốn đọc file để xuất ra dạng clear text thì không biết dùng lệnh gì được.
Mong các bác chỉ em hướng giải quyết với.

Em cám ơn !

nghia viết 13:47 ngày 01/10/2018

Cho mình hỏi thật nha bạn chạy code bài này chưa vậy? Không biết mình thấy có sai không chứ mình thấy bạn đang phá nát vùng nhớ rồi! (theo quan điểm của mình thôi)

Vu Xuan Loc viết 13:39 ngày 01/10/2018

Nó nát chỗ nào phiền bạn chỉ rõ giúp mình với

nghia viết 13:39 ngày 01/10/2018

Chào Vu Xuan Loc!
Ok uint16_t là unsigned short 2 byte vùng nhớ ok đúng ko?
sizeof(struct udphdr) = 8. uhdr = (struct udphdr *)udphdr_str;–> gán mảng char 4 byte cho uhdr 8 byte. Bạn thấy có gì kì kì không? Mình không hiểu tại sao bạn không khởi tạo vùng nhớ cho khỏe mà làm cái này nữa!

Vu Xuan Loc viết 13:37 ngày 01/10/2018

Mình sai rồi
Cám ơn vì đã góp ý

Bài liên quan
0