回答
您採取的方法將取決於值的可能範圍。您當然對可能的範圍有一些內部知識,並且您可能只對更窄範圍內的轉換感興趣。
所以,假設你只對整數值感興趣。在這種情況下,我只需將號碼分配給int
或long
,此時問題就變得相當明顯。或者,假設範圍不包含任何大指數,但您對小數部分的數字感興趣。要得到三位數的分數,我可以說int x = f * 1000;
,轉換x,然後插入小數點作爲字符串操作。
如果上述失敗,浮點數或雙精度浮點數或符號位都有符號位,分數和指數。分數中有一個隱藏的1
。 (這些數字被歸一化,直到它們沒有前導零爲止,此時他們再進行一次移位以獲得額外的精度。)數字等於分數(加上前導'1')* 2 **指數。幾乎所有使用IEEE 754表示的系統都可以使用this Wikipedia IEEE 754 page來了解格式。這不是,與剛轉換整數不同。
對於單精度,一旦你的指數和分數,該值注數1然後(FRAC/2 + 1)* 2 EXP,或壓裂* 2 EXP - 23 + 2 exp。
這裏是一個應該讓你開始一個有用的轉換的示例:
$ cat t.c
#include <stdio.h>
void xconvert(unsigned frac)
{
if (frac) {
xconvert(frac/10);
printf("%c", frac % 10 | '0');
}
}
void convert(unsigned i)
{
unsigned sign, exp, frac;
sign = i >> 31;
exp = (i >> (31 - 8)) - 127;
frac = i & 0x007fffff;
if (sign)
printf("-");
xconvert(frac);
printf(" * 2 ** %d + 2 ** %d\n", exp - 23, exp);
printf("\n");
}
int main(void)
{
union {
float f;
unsigned i;
} u;
u.f = 1.234e9;
convert(u.i);
return 0;
}
$ ./a.out
1252017 * 2 ** 7 + 2 ** 30
注1:在這種情況下,如果二進制點是在右側,而不是部分正在轉換左邊,然後對指數和隱藏位進行補償調整。
即使在嵌入式系統中,您也很難擊敗ftoa的性能。爲什麼重新發明輪子?
'ftoa'可能實際上並不在所提供的庫中可用。畢竟,它不是標準庫的一部分,即使它是嵌入式系統,也可以使用獨立實現來省略大部分標準庫。 – jamesdlin
#include<stdio.h>
void flot(char* p, float x)
{
int n,i=0,k=0;
n=(int)x;
while(n>0)
{
x/=10;
n=(int)x;
i++;
}
*(p+i) = '.';
x *= 10;
n = (int)x;
x = x-n;
while(n>0)
{
if(k == i)
k++;
*(p+k)=48+n;
x *= 10;
n = (int)x;
x = x-n;
k++;
}
*(p+k) = '';
}
int main()
{
float x;
char a[20]={};
char* p=&a;
printf("Enter the float value.");
scanf("%f",&x);
flot(p,x);
printf("The value=%s",p);
getchar();
return 0;
}
- 1. 如何使用C++將圖像文件轉換爲ASCII圖像?
- 2. Bash,將字節轉換爲ASCII而不使用hexdump或xxd
- 3. 將字母不是7位ASCII轉換爲ASCII(如將n轉換爲n並將其轉換爲±)
- 4. 如何爲十六進制數轉換爲ASCII使用C
- 5. C/C++:如何6bit的ASCII碼轉換爲位的ASCII
- 6. 使用R將geoTIF轉換爲ascii/text?
- 7. C++ ::將ASCII值轉換爲字符串
- 8. c#將十六進制轉換爲ASCII
- 9. 如何將c中的任意十六進制轉換爲ascii?
- 10. 如何將ASCII值轉換爲Objective-C中的字符?
- 11. 你如何將C中的ASCII轉換爲Hex?
- 12. 如何將ASCII碼轉換爲C++中的字符?
- 13. 如何將ascii代碼轉換爲c#中的正常代碼?
- 14. 如何將希伯來語(unicode)轉換爲c#中的Ascii?
- 15. 不能將float或double轉換爲字符數組(sprintf)
- 16. 如何將ascii碼轉換爲文本?
- 17. 如何將ASCII碼轉換爲uint64?
- 18. 如何將ASCII轉換爲字節?
- 19. 如何將位圖轉換爲ASCII
- 20. 如何將unicode轉換爲ASCII?
- 21. 使用grayVal轉換爲Ascii字符將圖像轉換爲Ascii代碼
- 22. 如何使用C或C++將.caf文件轉換爲.wav?
- 23. 在C/C++中將int轉換爲ASCII碼
- 24. C++:如何ASCII或ANSI轉換爲UTF8並存儲的std :: string
- 25. 在JavaScript中將字符轉換爲ASCII
- 26. 在Rails中將變量轉換爲ASCII
- 27. 在LISP中將CHAR轉換爲ASCII碼
- 28. 在Arduino中將ASCII轉換爲int
- 29. 在C函數中將二進制轉換爲ASCII並將ASCII轉換爲字母?
- 30. Bash:將非ASCII字符轉換爲ASCII
重寫'ftoa'。 – SLaks
你自己實現'ftoa'。如果您需要一些啓發,請查看開放源代碼標準庫中的實現。 –
你有權訪問「math.h」嗎? –