Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

[SOLVED] Need Help with - Warning: integer constant is too large for its type

Status
Not open for further replies.

wtr

Full Member level 5
Full Member level 5
Joined
May 1, 2014
Messages
298
Helped
29
Reputation
58
Reaction score
25
Trophy points
1,308
Activity points
4,095
Hello

I have the following in C


Code C - [expand]
1
2
3
4
5
6
7
8
9
10
char byte_16[16];
  bool write = false;
  while (fread(&byte_16,16,1,fp_r) != 0) {
    if (byte_16 == 0xAAAAAAAAAAAAAAAAAAAAAAAA43210033) {
      write = true;
    }
    if (write) {
      fwrite((void*) byte_16, 16, 1, fp_w_tmp);
    }
  }



The error message the compiler is giving me is
Warning: integer constant is too large for its type

I tried unsigned long long. Alas it did not work.
I want to be able to read in a binary file & when I see (hex)AAAAAAAAAAAAAAAAAAAAAAAA43210033 I want to output the following to an out file.


Thanks in advance
Regards
Wes
 

FvM

Super Moderator
Staff member
Advanced Member level 7
Joined
Jan 22, 2008
Messages
51,207
Helped
14,651
Reputation
29,580
Reaction score
13,795
Trophy points
1,393
Location
Bochum, Germany
Activity points
292,709
A legal C construct to check the data read into byte_16 could use memcmp().

The long hex value is surely no correct literal for an array of char. You should also consider that byte_16 is already representing a pointer.
 
  • Like
Reactions: wtr

    wtr

    Points: 2
    Helpful Answer Positive Rating

wtr

Full Member level 5
Full Member level 5
Joined
May 1, 2014
Messages
298
Helped
29
Reputation
58
Reaction score
25
Trophy points
1,308
Activity points
4,095
Thanks Fvm,

I hope you've sent me down the right path.

So essentially the way I've tried to do this is

1. Read from a file (binary) into a buffer - unsigned char byte_16[16]
2. Compare that part of byte_16 matches an identifier (hex value AAAAAAAAAAAAAAAA)

I've tried
if ((memcmp(byte_16, 0xAAAAAAAAAAAAAAAA, 8)) == 0)

However this returned compiler error
warning: passing argument 2 of 'memcmp' makes pointer from integer without a cast
I can do
if (byte_16[1] == 0XAA) && (byte_16[2] == 0XAA) ...etc
and it works...but I don't think very elegant
 

FvM

Super Moderator
Staff member
Advanced Member level 7
Joined
Jan 22, 2008
Messages
51,207
Helped
14,651
Reputation
29,580
Reaction score
13,795
Trophy points
1,393
Location
Bochum, Germany
Activity points
292,709
The compare string should be implemented as constant array. As you wrote it, the literal is interpreted as a pointer value and respectively truncated (e.g. to 32 bit). Can't work as intended.

Code:
constant char comp_16[] = {0xAA,0xAA, ....};
 
  • Like
Reactions: wtr

    wtr

    Points: 2
    Helpful Answer Positive Rating

wtr

Full Member level 5
Full Member level 5
Joined
May 1, 2014
Messages
298
Helped
29
Reputation
58
Reaction score
25
Trophy points
1,308
Activity points
4,095
Nvm I found my problem was with the way I was declaring my char to compare

the following fixed it.

Code C - [expand]
1
2
3
4
char Identifier[] = "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
  while (fread(&byte_16,16,1,fp_r) != 0) {
    if ((memcmp(byte_16, Identifier, 8)) == 0) {
      write = true;



Will mark this thread as solved
 

FvM

Super Moderator
Staff member
Advanced Member level 7
Joined
Jan 22, 2008
Messages
51,207
Helped
14,651
Reputation
29,580
Reaction score
13,795
Trophy points
1,393
Location
Bochum, Germany
Activity points
292,709
The compare value in post #1 doesn't look like a string because it has a zero in the middle. That's why suggested memcmp() instead of strcmp().
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Top