Dazu gibt es union:
union einheit
{
float messwert;
unsigned char mwertbytes[4];
unsigned short mwertshort[2]; unsigned int integerwert;
};
Bei meinem tumbleweed sind die Bytes bis zum Typ int nicht codiert. Bei längeren Datentypen schon.Kannst du aber testen ob der Speicher codiert ist oder nicht:
/*
* Copyright (C) 2017 Josef Wismeth <josef.wismeth@t-online.de>
*
* abstest is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* abstest is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <
http://www.gnu.org/licenses/>.
*/
#include <stdio.h>
double dabs(double wert)
{
int vzbyte;
union test
{
double absolutwert;
unsigned char a[8];
}tst;
if ((sizeof(double)) == 8)
{
tst.absolutwert = wert;
vzbyte = tst.a[7] & 128;
if(vzbyte != 0) tst.a[7] &= 127;
}
else tst.absolutwert *= -1;
return tst.absolutwert;
}
int main()
{
double plus = -25, abswert;
abswert = plus;
printf("Vorzeichenbit-Test\n");
printf("Länge der Datentypen.\n");
printf("Datentyp char.......: %ld\n", sizeof(char));
printf("Datentyp short......: %ld\n", sizeof(short));
printf("Datentyp int........: %ld\n", sizeof(int));
printf("Datentyp long.......: %ld\n", sizeof(long));
printf("Datentyp double.....: %ld\n", sizeof(double));
printf("Datentyp long double: %ld\n", sizeof(long double));
printf("dabs-Test:\n");
printf("Pluswert.................: %lf\n", plus);
printf("abswert alt..............: %lf\n", abswert);
abswert = dabs(plus);
printf("abswert neu..............: %lf\n", abswert);
return (0);
}
Wenn nach dem Vorzeichenwechsel nur das Vorzeichen sich ändert aber nicht der Wert danach, dann klappt das mit union.