Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 258
  • Last Modified:

Reading integers from disk

When I read from disk I usually read into a void* type memory block, and then sort out the types using pointers.

But, I find strange discrepencies sometimes when dealing with integers.  For example, if I have a 64-bit integer stored in a void memory block, I access it by dereferencing the region in memory, and casting it to the appropriate type.

uint64_t number = (uint64_t) *( (byte*) membuffer + offset);

I also have to cast the void* pointer itself to a char*, or my byte* typedef, in order to add the offset distance.

I can also access the integer like this:

memcpy(&number, (byte*) membuffer + offset, sizeof(number));

The first method seems more direct, but it sometimes results in garbage numbers, whereas the second method always works properly.  Is there some reason that accessing the data via dereferencing the pointer and casting might not work properly?
0
chsalvia
Asked:
chsalvia
  • 2
1 Solution
 
ozoCommented:
does
uint64_t number = *( (uint64_t*) ( (byte*) membuffer + offset));
work any beter?
If not, there may be alignment issues for pointers to different types
0
 
chsalviaAuthor Commented:
That worked correctly, thanks.  But I'm confused.  Why would casting to a pointer-to-integer type, and then dereferencing that, result in something different than dereferncing a pointer and casting to an integer type?  It's the same memory region.
0
 
ozoCommented:
when you dereference a byte pointer, you get a byte.  when you dereference a uint64_t pointer, you get a uint64_t
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now