कनवर्ट करना मैं float
मान char*
पर C
भाषा में कैसे परिवर्तित कर सकता हूं?फ्लोट को चार *
उत्तर
char buffer[64];
int ret = snprintf(buffer, sizeof buffer, "%f", myFloat);
if (ret < 0) {
return EXIT_FAILURE;
}
if (ret > sizeof buffer) {
/* Result was truncated - resize the buffer and retry.
}
कि myCharPointer
में myFloat
की स्ट्रिंग प्रतिनिधित्व स्टोर करेगा। सुनिश्चित करें कि स्ट्रिंग इसे पकड़ने के लिए पर्याप्त है, हालांकि।
snprintf
sprintf
से एक बेहतर विकल्प के रूप में यह गारंटी देता है यह आप तर्क में आपूर्ति बफर के आकार अतीत कभी नहीं लिखेंगे है 2.
पर प्रिंट करना चाहते हैं तो बफर ओवररन सुनिश्चित करने के लिए स्नप्रिंटफ़ का उपयोग करें। – JeremyP
शानदार विचार! मैं इसे अपने उत्तर में जोड़ दूंगा ... –
char* str=NULL;
int len = asprintf(&str, "%g", float_var);
if (len == -1)
fprintf(stderr, "Error converting float: %m\n");
else
printf("float is %s\n", str);
free(str);
+1 निर्दिष्ट होना चाहिए कि यह एक जीएनयू एक्सटेंशन afaik है।(asprintf एक जीएनयू एक्सटी मेरा मतलब है) – ShinTakezou
char array[10];
snprintf(array, sizeof(array), "%f", 3.333333);
arduino में
:
//temporarily holds data from vals
char charVal[10];
//4 is mininum width, 3 is precision; float value is copied onto buff
dtostrf(123.234, 4, 3, charVal);
monitor.print("charVal: ");
monitor.println(charVal);
उत्तर स्वीकार करने के बाद लंबे समय तक।
sprintf()
, या संबंधित कार्यों का उपयोग करें, जैसा कि कई अन्य लोगों ने सुझाव दिए हैं, लेकिन एक बेहतर प्रारूप विनिर्देशक का उपयोग करें।
"%.*e"
का उपयोग करना, कोड विभिन्न मुद्दों को हल करती है:
अधिकतम बफर आकार की जरूरत कहीं अधिक उचित है, 18.
sprintf(buf, "%f", FLT_MAX);
तरह 47+ की जरूरत सकता है।sprintf(buf, "%f", DBL_MAX);
317+का उपयोग
".*"
float x
की एक स्ट्रिंग संस्करण भेद करने के लिए की जरूरत दशमलव स्थानों की संख्या को परिभाषित करने के कोड की अनुमति देता है और यह अगले सर्वोच्चfloat
पड़ सकता है। के विवरण के लिए, Printf width specifier to maintain precision of floating-point value"%e"
का उपयोग करना देखें कोड बल्कि सभी मुद्रण"0.000000"
जो परिणाम जब|x| < 0.0000005
है की तुलना में एक दूसरे से छोटेfloat
रों भेद करने के लिए अनुमति देता है।#define FLT_STRING_SIZE (1+1+1+(FLT_DECIMAL_DIG-1)+1+1+ 4 +1) // - d . dddddddd e - dddd \0 char buf[FLT_STRING_SIZE]; sprintf(buf, "%.*e", FLT_DECIMAL_DIG-1, some_float);
विचार:
IMO, बेहतर buf[FLT_STRING_SIZE*2]
तरह खरोंच पैड के लिए 2x बफर आकार का उपयोग करें।
अतिरिक्त मजबूती के लिए, snprint()
का उपयोग करें।
typedef union{
float a;
char b[4];
} my_union_t;
आप बाइट द्वारा फ्लोट डेटा वैल्यू बाइट तक पहुंच सकते हैं और इसे बिना 8-बिट आउटपुट बफर (उदा। यूएसएआरटी) के माध्यम से भेज सकते हैं।
अद्यतन: प्रोसेसर की अंतहीनता के बारे में मत भूलना! – Peter
- 1. हास्केल int फ्लोट और चार फ्लोट करने के लिए int
- 2. सी चार को चार *
- 3. चार सरणी वी.एस. चार *
- 4. सी चार से चार *
- 5. फ्लोट को स्क्रॉल करना
- 6. फ्लोट को एक पूर्णांक
- 7. फ्लोट वैल्यू को एनएसएसटींग
- 8. Convert चार [] LPCWSTR को
- 9. सरणी सरणियों चार को
- 10. चार को int
- 11. बीएसटी को चार *
- 12. पावरशेल चार एरे को
- 13. चार संदर्भ को समझना
- 14. ज़वाल को चार *
- 15. स्ट्रिंग को चार
- 16. फ्लोट
- 17. फ्लोट
- 18. नीयन फ्लोट 32x4_t
- 19. फ्लोट
- 20. एक फ्लोट
- 21. फ्लोट
- 22. फ्लोट
- 23. चार
- 24. पायथन फ्लोट - स्ट्र - फ्लोट अजीबता
- 25. चार सरणी बनाम चार सूचक
- 26. हेक्स स्ट्रिंग को वापस चार
- 27. स्ट्रिंग सामग्री को चार सरणी
- 28. .NET/C# - चार [] को स्ट्रिंग
- 29. अहस्ताक्षरित चार में कनवर्ट कर चार * *
- 30. strtok - बनाम चार सूचक चार सरणी
आपको और अधिक विशिष्ट होने की आवश्यकता होगी। आप क्या चाहते हैं - फ्लोट के दशमलव मूल्य का एक पाठ्य प्रतिनिधित्व? बाइट्स की एक धारा जिसे आप आसानी से पास कर सकते हैं और बाद में फ्लोट का पुनर्निर्माण करने के लिए उपयोग कर सकते हैं? – crazyscot