আমি কীভাবে একটি ফ্লোটকে চরে রূপান্তর করব?


11

বৈদ্যুতিক প্রকৌশল স্ট্যাক এক্সচেঞ্জে এই প্রশ্ন জিজ্ঞাসা করা হয়েছিল এবং এখানে নির্দেশিত ছিল:

সুন্দর স্ব বর্ণনামূলক; আমি কীভাবে ফ্লোটকে চরে রূপান্তর করতে যাব? আমার কোড রয়েছে যাতে ভাসা 'প্রতিরোধের' নিয়ত আপডেট করা হচ্ছে। আমি 'রেজিস্ট্যান্স' এর মান নিতে ভেরিয়েবল 'ফলাফল' আপডেট করতে সক্ষম হতে চাই। কোডগুলির কিছু এখানে দেওয়া হয়েছে, যদি এটি সহায়তা করে:

const char * result = "";
float resistance = 2.5;

result = resistance; //This bit (obviously) doesn't work

আপনার সাহায্যের জন্য ধন্যবাদ!

উত্তর:


15

সেখানে বলা মান যাও Arduino লাইব্রেরিতে একটি ফাংশন dtostrf()। আমি এটিকে "দশমিক থেকে স্ট্রিং ফ্লোট" হিসাবে ভাবি। আপনি ভাসমান স্থানে পাস করুন, আপনি পুরো সংখ্যাটি কতটা প্রশস্ত করতে চান (এটি মাপসই করা হবে), যথার্থ দশমিকের সংখ্যা - এবং আপনি যে বাফারটি এটি পূরণ করতে চান।

মনে রাখবেন যে! আপনাকে বাফার সরবরাহ করতে হবে, এবং পর্যাপ্তর চেয়ে বেশি সরবরাহ করার জন্য আপনাকে যত্নবান হওয়া দরকার! 1 টিও ভুলে যাবেন না (শেষে NUL চরিত্রটি সংরক্ষণ করতে):

char result[8]; // Buffer big enough for 7-character float
dtostrf(resistance, 6, 2, result); // Leave room for too large numbers!

এই দেব resultমত মান " 1.23"এবং " -1.23"এবং "123456789"(উদ্ধৃতি চিহ্ন বিনা)। শেষ উদাহরণটি লক্ষ্য করুন - সংখ্যাটি খুব বেশি হলে এটি কেটে যাবে না এবং 10- অক্ষরটি result(চূড়ান্তটি ভুলে যাবেন না NUL) কেবল আপনার বাফারকে উপচে ফেলেছে ...

ঘটনাক্রমে, আপনি যদি একটি নেতিবাচক প্রস্থ নির্দিষ্ট করে থাকেন তবে এটি উত্তরটি সঠিকভাবে সমর্থন করবে না, এটি এটিকে বাম-ন্যায়সঙ্গত করবে (শুরুতে পরিবর্তে কোনও স্পেস রেখে দেবে)।


কৌতুকটি সুন্দরভাবে করলেন! আপনাকে অনেক ধন্যবাদ স্যার :)
হিগসবসন

-2

মূলত আপনি একটি 4-বাইট ভেরিয়েবল (ফ্লোট) একটি 4-বাইট স্ট্রিংতে রূপান্তর করার চেষ্টা করছেন (চর ভেরিয়েবল 1 বাইট আকারের)। আরডুইনো ডেটা প্রকার সম্পর্কে আরও তথ্য এখানে http://playground.arduino.cc/Code/DatatypePractices

আপনি এই প্রশ্নের উত্তরগুলি ব্যবহার করতে পারেন /programming/18270974/how-to-convert-a-float-to-a-4-byte-char-in-c

/programming/24420246/c-function-to-convert-float-to-byte-array

আমি স্বীকার করি যে const char * result = "";আপনার উদাহরণ ব্যবহার করে আমি বিভ্রান্ত হয়ে পড়েছি ।

"কনস্ট" কীওয়ার্ডটি ভেরিয়েবলটিকে কেবল "পঠনযোগ্য" হিসাবে তৈরি করে এবং তাই আপনি এটিকে পরিবর্তন করতে পারবেন না। https://www.arduino.cc/en/Reference/Const

সম্পাদনা করুন: দুর্ভাগ্যক্রমে আমার উপরের সমাধানগুলি পরীক্ষা করার জন্য আমার কাছে এখনই আরডুইনো ডিভাইস নেই


1
constমূলশব্দটি কেবল পরিবর্তনশীলকে পঠনযোগ্য করে তোলে না make এখানে চলকটি একটি পয়েন্টার এবং এটি ধ্রুবক হওয়ার দরকার নেই। constশব্দ যোগ্যতা অর্জন ডেটাতে উল্লেখ করা হচ্ছে , না পয়েন্টার নিজেই। অন্য কথায়, আপনাকে সেই পয়েন্টারের মাধ্যমে স্ট্রিংটি সংশোধন করার অনুমতি নেই। আপনি যদি একটি ধ্রুবক পয়েন্টার চান তবে এটি হিসাবে ঘোষণা করুন char * const result(বা const char * const resultযদি আপনি constডেটারে পয়েন্টার চান const)।
এডগার বোনেট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.