logo
down
shadow

How to get float value from uint32_t?


How to get float value from uint32_t?

By : Bryan Raynolds
Date : September 24 2020, 03:00 AM
seems to work fine i use this part of code to read float value from OSC message on my microcontroller. However i get "dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]" error and no value is showed on printf. Is there any workaround for this one? marker is in struct as:
code :
float tosc_getNextFloat(tosc_message *o) {
  // convert from big-endian (network btye order)
  const uint32_t i = ntohl(*((uint32_t *) o->marker));
  o->marker += 4;

  float tmp = 0;
  memcpy((void *)&tmp, (void *)&i, sizeof(uint32_t));
  return tmp;
}


Share : facebook icon twitter icon
UINT_MAX->float->uint32_t Results in 0 on VC++

UINT_MAX->float->uint32_t Results in 0 on VC++


By : Xannisth
Date : March 29 2020, 07:55 AM
seems to work fine When converting from an integer type to a real type the result may be inexact and rounded towards the closest representable (above or below the original value) in the real type. In your case float has 24 bits in its mantissa part, so, 0xFFFFFFFF isn't going to survive the conversion unchanged as it needs 32 bits of mantissa. So, it can convert to 0x100000000 (closest above). If that happens, you'll be converting 0x100000000 from float to your 32-bit unsigned type. And this conversion results in undefined behavior (which includes unpredictable/unreliable results) because the value is outside of the range of the 32-bit unsigned type.
You also get UB with the other compiler, you're just unaware of it. Circumvent optimization by introducing volaitle (in declarations of r1, r2 and r3) and you'll see it (ideone.com/1CCat8).
Copy bit pattern: float to uint32_t

Copy bit pattern: float to uint32_t


By : Madhav Hatwalne
Date : March 29 2020, 07:55 AM
it should still fix some issue Yes, this is undefined behaviour as it breaks the strict aliasing rule:
Store float value in uint32_t pointer

Store float value in uint32_t pointer


By : I Is Uh Ninja
Date : March 29 2020, 07:55 AM
will help you The simplest approach to reinterpret the bits would be to use memcpy, if you know that sizeof(float) == sizeof(uint32_t) 1
code :
float f = /* some_val */;
uint32_t fbits = 0;
memcpy(&fbits, &f, sizeof fbits);
union {
  float    from;
  uint32_t to;
} pun = { .from = /*some val*/ };

// use pun.to
Conversion to float in uint32_t calculation

Conversion to float in uint32_t calculation


By : Maksim L
Date : March 29 2020, 07:55 AM
this will help I am trying to improve a SWRTC by modifying the definition of a second (long unsigned n_ticks_per_second) by synchronizing time with a server. , This line
code :
drift_per_sec_TICK = total_drift_SEC / (at_update_posix_time - last_update_posix_time);
drift_per_sec_TICK = (float) total_drift_SEC / (at_update_posix_time - last_update_posix_time);
bitwise casting uint32_t to float in C/C++

bitwise casting uint32_t to float in C/C++


By : SUNG-ROK JUNG
Date : March 29 2020, 07:55 AM
To fix the issue you can do I'm receiving a buffer from a network which was converted to an array of 32-bit words. I have one word which is defined as an ieee float by my interface document. I need to extract this word from the buffer. It's tough to cast from one type to another without invoking a conversion. The bits are already adhere to the ieee float standard, I don't want to re-arrange any bits. , In C++, the right way™ is:
code :
float ieee_float(uint32_t f)
{
    static_assert(sizeof(float) == sizeof f, "`float` has a weird size.");
    float ret;
    std::memcpy(&ret, &f, sizeof(float));
    return ret;
}
Related Posts Related Posts :
  • Avoid Overflow when Calculating π by Evaluating a Series Using 16-bit Arithmetic?
  • How to handle data or char -1 when reading from file, since EOF is also -1
  • Compare every 1kb of contents of two files instead of character by character
  • Understanding functions in stm8s disassembly?
  • Recursive and no-recursive get different answer
  • Can anyone explain the following output of the code?
  • How to resync time from NTP server in esp-idf?
  • Output for the following C code is confusing me
  • Determine if window is visible with High CPU
  • Writing a file by taking input from user only saves value for "x" only
  • How should I fill an array of ints from a file using command line args? The size of the file and the no. of elements may
  • Segmentation Fault While Reading File in C
  • Fill an array at index n with m times data without bit-fields
  • Why don't the values I type in the terminal match the values I've already stored in the array?
  • MPLABX XC16 unable to resolve built-in identifier __builtin_dmaoffset
  • How call and compile function from elf to my binary?
  • Modifying non-const char array that is referred to by const char array
  • Does anyone see any mistakes here? I am trying to get a message via a pipe, from my parent to child
  • Memory Leak - Singly linked list in C
  • Trouble with translation of typedef between C to D
  • Why does SIGINT stop sleep more than one time?
  • How to pause a timer created with CreateTimerQueueTimer
  • How can I read data from file ? I can't fix it
  • Scanf in visual studio not accepting multiple cases of characters
  • How can I determine if a char* is a windows line ending?
  • I am trying to store value in long long int type but giving wrong return
  • How to manage different kinds of data in a linked list?
  • uint8_t not rollover to 0 after reaching 255 not working properly
  • Why do these two execvp produce different results?
  • Pass uintmax_t or size_t to custom printf conversion specifier
  • Why does free() leaves stuff in memory?
  • Why pointers can't be used to index arrays?
  • memory allocation eror in C
  • C custom datatypes mapped to C datatypes grouped under a single struct
  • pipe() data is not transferred to child process
  • Getting a core dump from a simple C program
  • Fatal error on makefile, need to understand the problem
  • How can I add a delay of 90 minutes when a port has gone from 0 to 1?
  • To use strcpy or not
  • the usage of strtok() in c shows warnings and returns segmentation fault(core dumped)
  • Trouble allocating array of structs
  • Only first char of user input used in array
  • Why does "int x = 5; printf("%d %d %d", x==5, x=10, x==5);" in C print "0 10 0"?
  • How to scan specific string format in C?
  • sscanf skipping the final value when reading multiple values from a line
  • How can I access full memory space in FreeDOS with C application
  • Semantics of sem_getvalue() in POSIX
  • What does the [x,y] symbol mean in a multidimensional array access?
  • compilation error: cast from pointer to integer of different size
  • why am i getting compilation error "error: conflicting types for ‘ptr’ " for the following code? static int va
  • Why does getw return -1 when trying to read a character?
  • Why C program in whch two functions call each other recursively gives segmentation fault on linux?
  • ssize_t is undefined
  • Passing a generic argument in a C function
  • Restoring stdout after redirecting it via freopen()
  • Tuples "cannot be marshalled in a foreign call" when trying to export a Haskell function to C
  • Dereferencing double pointer to pass to recursive function
  • Why is the output different in these two scenarios
  • what will happen if we dont use free() for allocated memory
  • counting words from user input
  • shadow
    Privacy Policy - Terms - Contact Us © 35dp-dentalpractice.co.uk