Click here to Skip to main content
15,891,184 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: Removing repeated path Pin
Richard MacCutchan30-Oct-12 0:40
mveRichard MacCutchan30-Oct-12 0:40 
QuestionRe: Removing repeated path Pin
David Crow30-Oct-12 3:18
David Crow30-Oct-12 3:18 
QuestionWIC/C++: People Tagging: Unable to set the People Tagging metadata Pin
Morpheus2matrix29-Oct-12 9:27
Morpheus2matrix29-Oct-12 9:27 
AnswerRe: WIC/C++: People Tagging: Unable to set the People Tagging metadata Pin
enhzflep29-Oct-12 15:27
enhzflep29-Oct-12 15:27 
GeneralRe: WIC/C++: People Tagging: Unable to set the People Tagging metadata Pin
Morpheus2matrix29-Oct-12 22:06
Morpheus2matrix29-Oct-12 22:06 
GeneralRe: WIC/C++: People Tagging: Unable to set the People Tagging metadata Pin
enhzflep30-Oct-12 9:16
enhzflep30-Oct-12 9:16 
GeneralRe: WIC/C++: People Tagging: Unable to set the People Tagging metadata Pin
Morpheus2matrix30-Oct-12 21:56
Morpheus2matrix30-Oct-12 21:56 
Questionfputc() writes an extra character Pin
Member 923664029-Oct-12 5:25
Member 923664029-Oct-12 5:25 
I've written a simple program to parse a text file and create a binary file from it.

The program scans every character of the text file looking for "0x" and then writes the next two characters in the new file as their binary value (0x00 - 0xff)

However I'm finding that an extra binary character (value 0x0d) is being written to location 0x0a in the output binary file.

Have I made a stupid mistake in my code?

I'm using GCC - could it be the compiler?

Could it be a non printable character in the input file?

Thanks,
Andy



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


FILE *src;
FILE *dst;
char sstr[100];
int ch;

int ReadString(void)
{
    if(fgets(sstr,100,src) != NULL)
    {
        printf("\n%s",sstr);
        ch = 0;
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    char dstr[100];
    char c;
    unsigned char h;
    int state = 0;

    printf("Enter File Path and Name to Open\n");
    scanf("%s",sstr);
    src = fopen(sstr,"r");
    if(src == NULL)
    {
        printf("Error Opening File %s\n",sstr);
        return 0;
    }
    else
    {
        printf("Successfully Opened File %s\n",sstr);
    }

    ch = (strchr(sstr,'.') - sstr) + 1;
    strncpy(dstr,sstr,ch);
    dstr[ch++] = 'b';
    dstr[ch++] = 'i';
    dstr[ch++] = 'n';
    dstr[ch] = 0;
    dst = fopen(dstr,"w");

    if(dst == NULL)
    {
        printf("Error Creating File %s\n",dstr);
        fclose(src);
        return 0;
    }
    else
    {
        printf("Successfully Opened File %s\n",dstr);
    }

    if(!ReadString())
    {
        fclose(src);
        fclose(dst);
        return 0;
    }

    while(sstr[ch]!=0)
    {
        switch(state)
        {
            case 0: // read a char
                c = sstr[ch++];
                if(c == '/')    // Comment line
                {
                    state = 20;
                }
                if(c == '0')    // Start of "0x" string
                {
                    state = 10;
                }
            break;

            case 10: // "0x" string?
                c = sstr[ch++];
                if(c == 'x')    // Yes
                {
                    h = 0;
                    state = 11;
                }
            break;

            case 11:
                c = sstr[ch++];
                if((c > 0x2F) && (c < 0x3A)) // 0 - 9
                {
                    h = c - 0x30;
                }
                if((c > 0x40) && (c < 0x47)) // A - F
                {
                    h = c - 0x37;
                }
                if((c > 0x60) && (c < 0x67)) // a - f
                {
                    h = c - 0x57;
                }
                h = h << 4;
                state++;
            break;

            case 12:
                c = sstr[ch++];
                if((c > 0x2F) && (c < 0x3A)) // 0 - 9
                {
                    c = c - 0x30;
                }
                if((c > 0x40) && (c < 0x47)) // A - F
                {
                    c = c - 0x37;
                }
                if((c > 0x60) && (c < 0x67)) // a - f
                {
                    c = c - 0x57;
                }
                h = h + c;
                fputc(h,dst);
                state = 0;
                if(h<0x10)
                    printf("0");
                printf("%X ",h);
            break;

            case 20: // Comment Line?
                c = sstr[ch++];
                if(c == '/') // Yes
                {
                    if(!ReadString()) // Read Next Line
                    {
                        fclose(src);
                        fclose(dst);
                        return 0;
                    }
                    state = 0;
                }
            break;
        }
        if((ch>=100) || (sstr[ch] == 0))
        {
            if(!ReadString())
            {
                fclose(src);
                fclose(dst);
                return 0;
            }
        }
    }

    fclose(src);
    fclose(dst);
    return 0;
}


Input file text:
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,
0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,
0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,
0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF,

AnswerRe: fputc() writes an extra character Pin
Member 923664029-Oct-12 6:01
Member 923664029-Oct-12 6:01 
GeneralRe: fputc() writes an extra character Pin
Member 923664029-Oct-12 6:12
Member 923664029-Oct-12 6:12 
GeneralRe: fputc() writes an extra character Pin
Chris Meech29-Oct-12 6:29
Chris Meech29-Oct-12 6:29 
AnswerRe: fputc() writes an extra character Pin
Richard MacCutchan29-Oct-12 6:50
mveRichard MacCutchan29-Oct-12 6:50 
QuestionApplication error 0xc0150002 when run MFC in Window 7 Pin
Andraw11129-Oct-12 4:32
Andraw11129-Oct-12 4:32 
AnswerRe: Application error 0xc0150002 when run MFC in Window 7 Pin
Chris Meech29-Oct-12 6:40
Chris Meech29-Oct-12 6:40 
GeneralRe: Application error 0xc0150002 when run MFC in Window 7 Pin
Andraw11129-Oct-12 6:46
Andraw11129-Oct-12 6:46 
GeneralRe: Application error 0xc0150002 when run MFC in Window 7 Pin
Chris Meech29-Oct-12 6:53
Chris Meech29-Oct-12 6:53 
GeneralRe: Application error 0xc0150002 when run MFC in Window 7 Pin
Rolf Kristensen29-Oct-12 9:12
Rolf Kristensen29-Oct-12 9:12 
GeneralRe: Application error 0xc0150002 when run MFC in Window 7 Pin
Andraw11129-Oct-12 11:32
Andraw11129-Oct-12 11:32 
Questionmicrosoft apifor upnp Pin
Saed Leghaee28-Oct-12 8:49
Saed Leghaee28-Oct-12 8:49 
AnswerRe: microsoft apifor upnp Pin
«_Superman_»28-Oct-12 19:47
professional«_Superman_»28-Oct-12 19:47 
GeneralRe: microsoft api for upnp Pin
Saed Leghaee29-Oct-12 8:28
Saed Leghaee29-Oct-12 8:28 
GeneralRe: microsoft api for upnp Pin
enhzflep29-Oct-12 15:37
enhzflep29-Oct-12 15:37 
GeneralRe: microsoft api for upnp Pin
Saed Leghaee3-Dec-12 8:15
Saed Leghaee3-Dec-12 8:15 
QuestionGetting error while sending data from client to Server in Socket using TCP/IP Pin
shanmugarajaa26-Oct-12 21:43
shanmugarajaa26-Oct-12 21:43 
AnswerRe: Getting error while sending data from client to Server in Socket using TCP/IP Pin
Richard MacCutchan26-Oct-12 22:19
mveRichard MacCutchan26-Oct-12 22:19 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.