我想將例如2.45的浮點數轉換爲4字節的char數組。 所以2.45應該是這樣的'@' 'FS' 'Ì' 'Í'
這是二進制ieee代表2.45 = 01000000 00011100 11001100 11001101
?如何將float轉換爲C中的4字節char?
我已經解決了這個問題,但它的複雜性很差。你有什麼好主意嗎?
感謝您的好答案。
你能告訴我從char數組返回到浮點數的方式嗎?
我想將例如2.45的浮點數轉換爲4字節的char數組。 所以2.45應該是這樣的'@' 'FS' 'Ì' 'Í'
這是二進制ieee代表2.45 = 01000000 00011100 11001100 11001101
?如何將float轉換爲C中的4字節char?
我已經解決了這個問題,但它的複雜性很差。你有什麼好主意嗎?
感謝您的好答案。
你能告訴我從char數組返回到浮點數的方式嗎?
你必須這樣做,包括這兩者的幾種方法:
使用類型轉換和指針:
float f = 2.45;
char *s = (char *) &f;
注意,這是不以任何方式安全在「字符串」之後沒有字符串終止符。
使用union
:
union u
{
float f;
char s[sizeof float];
};
union u foo;
foo.f = 2.45;
的字符數組現在可以訪問得到的字節值。還要注意,像第一個替代方案一樣,沒有字符串終止符。
「這實際上是利用未定義的行爲」 - 你可以進一步解釋一下嗎? – Jimbo
''memcpy()'優於你的兩種方法。 (順便說一句,只要別名指針是(有符號或無符號)'char *',第一個方法就是「安全」的,第二種方法也不會調用UB。 – 2013-08-16 10:24:45
@Jimbo記住所有' union'共享相同的內存,這意味着你只能可靠地獲得最後一個成員的值,如果我在我的例子中設置了'f'成員,那麼我應該只有'f',直到我設置了另一個成員。 –
只是使用memcpy:
#include <string.h>
float f = 2.45f;
char a[sizeof(float)];
memcpy(a, &f, sizeof(float));
如果您需要相反的字節順序則是扭轉a
字節之後,例如一件小事
int i, j;
for (i = 0, j = sizeof(float) - 1; i < j; ++i, --j)
{
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}
'char a [sizeof the_float]; memcpy(char_array,&the_float,sizeof the_float)'? – 2013-08-16 10:17:32
''Ì''和''Í''只是一個字符集中'11001100 11001101'的表示。 – glglgl