खोजने के एक विशिष्ट बाइट में एक फ़ाइल

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 बाइट:

सामग्री की 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 डिफ़ॉल्ट रूप से प्रचार करें.
Eugene Sh.

मदद के लिए धन्यवाद!
human bean

के मूल्य (char)bytes कार्यान्वयन है परिभाषित अगर 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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में