หาเจาะจงตามวันที่@item:inlistbox sort ในแฟ้ม

0

คำถาม

ฉันมีแฟ้มอยู่ซึ่งฉันกำลังพยายามตามหาลำดับไบต์:0xFF,0xD8,0xFF และ 0xE0. สำหรับตอนนี้ปล่อยให้เป็นเดาว่าฉันแค่มองหา 0xFF. ฉันสร้างโปรแกรมนี้สำหรับการทดสอบ:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

void analyzeFile(char* filename)
{
    FILE* filePtr = fopen(filename, "rb");

    int numImages = 0;

    while (!feof(filePtr))
    {
        char bytes;

        bytes = getc(filePtr);

        printf("%c", bytes);

        if ((bytes == 0xFF))
        {
            numImages++;
            printf("image found!\n");
        }
    }

    printf("%d\n", numImages);
}

นี่มันไม่ทำงาน ตอนที่ฉันเรียก analyzeFile กับพารามิเตอร์"test.txt"มันแสดงเนื้อหาของแฟ้มออกไปสบายดีแต่ไม่ได้ตรวจจับเดียว 0xFF ตามวันที่@item:inlistbox sort:

เนื้อหาของ test.txt:

aÿØÿÿà1234

แสดงผล:

aÿØÿÿà1234
0

สำหรับอ้างอิง,0xFF เป็นค่า y-diaeresis,ÿ ตาม ASCII.

c char file
2021-11-23 15:01:14
1

คำตอบที่ดีที่สุด

0

มีสองปัญหากับรหัสของคุณ. สำหรับครั้งแรกเห็น: ทำไมถึง"ในขณะที่(!feof(แฟ้ม))"ตลอดผิดปกติ?

ที่สองปัญหาคือ getc (หรือ fgetc)จะได้ค่าเป็น intไม่ใช่ char. นั่นก็หมายถึงของคุณ char ค่าของ 0xFF คือเซ็นต์ชื่อพาตัว-ส่วนขยายเพิ่มเติม(ต้อง 0xFFFFFFFFส่วนใหญ่)เมื่อมันได้รับการเลื่อนขั้นต้องการ int สำหรับ if ((bytes == 0xFF)) เมื่อเทียบกันแล้ว ดังนั้นใช้ int สำหรับของคุณ bytes ตัวแปรเปลี่ยนวลองทดสอบค่าที่อ่านสำหรับ EOF สัญญาณ:

void analyzeFile(char* filename)
{
    FILE* filePtr = fopen(filename, "rb");
    if (!filePtr) { // Add some error handling...
        printf("Could not open file!");
        return;
    }
    int numImages = 0;
    int bytes;
    while ( ( bytes = getc(filePtr) ) != EOF) {
        printf("%02X %c\n", (unsigned)bytes, bytes);

        if (bytes == 0xFF) { // Removed redundant extra parentheses
            numImages++;
            printf("image found!\n");
        }
    }
    fclose(filePtr); // Don't forget to close the file!
    printf("%d\n", numImages);
}
2021-11-23 17:14:53

ไม่เกี่ยวข้องกับคำถามแต่ไม่ใช่แสดง (char)bytes เป็นพารามิเตอร์ต้อง printf ไม่มีประโยชน์? มันจะ casted กลับไป int โดยค่าปริยาย promotions.
Eugene Sh.

ขอบคุณที่ช่วยด้วย!
human bean

ค่าของ (char)bytes คือ implementation กำหนดไว้ว่า bytes > CHAR_MAX (ซึ่งสามารถเกิดขึ้นถ้าเพีย char คือเซ็นต์ชนิด)ดังนั้นอาจจะดีกว่าที่จะไม่แสดงมัน char. แล้ว %X คาดหวังให้เป็น unsigned intดังนั้นคุณ ทำอย่าง ต้องการการรักษา(ไป unsigned int)สำหรับที่หนึ่ง.
Ian Abbott

@IanAbbott ยุติธรรมความคิดเห็น-แล้วเจอกันแก้ไข.
Adrian Mole

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่