%#08Xরূপান্তর সাথে মান আগে বসে আবশ্যক 0X; যে স্ট্যান্ডার্ড দ্বারা প্রয়োজনীয়। স্ট্যান্ডার্ডের কোনও প্রমাণ নেই যে উপসর্গটির দৈর্ঘ্যের অংশ হিসাবে গণনা করা ছাড়া স্পেসিফিকেশনের অংশের #আচরণের পরিবর্তন করা উচিত (যাতে আপনি ব্যবহার করতে চান / ব্যবহার করতে পারেন । যদি আমার মতো, আপনার হেক্সস হিসাবে উপস্থাপন করা পছন্দ করেন তবে , তারপরে আপনাকে পছন্দসই ফলাফল অর্জন করতে ব্যবহার করতে হবে You আপনি ব্যবহার করতে পারেন080X%#010X0x1234CDEF0x%08X%#.8X এবং এটি নেতৃস্থানীয় শূন্যগুলি সন্নিবেশ করা উচিত।
নিম্নলিখিত কোডে বিভিন্নতার চেষ্টা করুন:
#include <stdio.h>
int main(void)
{
int j = 0;
printf("0x%.8X = %#08X = %#.8X = %#010x\n", j, j, j, j);
for (int i = 0; i < 8; i++)
{
j = (j << 4) | (i + 6);
printf("0x%.8X = %#08X = %#.8X = %#010x\n", j, j, j, j);
}
return(0);
}
একটি RHEL 5 মেশিনে এবং ম্যাক ওএস এক্সে (10.7.5) আউটপুটটি ছিল:
0x00000000 = 00000000 = 00000000 = 0000000000
0x00000006 = 0X000006 = 0X00000006 = 0x00000006
0x00000067 = 0X000067 = 0X00000067 = 0x00000067
0x00000678 = 0X000678 = 0X00000678 = 0x00000678
0x00006789 = 0X006789 = 0X00006789 = 0x00006789
0x0006789A = 0X06789A = 0X0006789A = 0x0006789a
0x006789AB = 0X6789AB = 0X006789AB = 0x006789ab
0x06789ABC = 0X6789ABC = 0X06789ABC = 0x06789abc
0x6789ABCD = 0X6789ABCD = 0X6789ABCD = 0x6789abcd
আমি 0 এর চিকিত্সা দেখে কিছুটা অবাক হই; 0Xউপসর্গটি কেন বাদ দেওয়া হয়েছে তা আমি পরিষ্কার নই , তবে দুটি পৃথক সিস্টেম এটি করার সাথে এটি মানক হতে হবে। এটি #বিকল্পটির বিরুদ্ধে আমার কুসংস্কারগুলি নিশ্চিত করে ।
শূন্যের চিকিত্সা মান অনুযায়ী।
.6 পতাকার অক্ষর এবং তাদের অর্থ হ'ল :
...
#ফলাফলটি "বিকল্প আকারে" রূপান্তরিত হয়। ... x(বা X) রূপান্তরকরণের জন্য, একটি ননজারো ফলাফল এটির 0x(বা 0X) প্রিফিক্স করেছে। ...
(সামনে জোর দাও.)
নোট করুন যে ব্যবহার %#Xকরে হেক্স ডিজিট এবং 0Xউপসর্গ হিসাবে আপার ক্ষেত্রে অক্ষর ব্যবহার করা হবে ; %#xহেক্সস ডিজিটের জন্য এবং 0xউপসর্গ হিসাবে ছোট হাতের অক্ষর ব্যবহার করে ব্যবহার করা হবে । আপনি যদি 0xউপসর্গ এবং বড় হাতের অক্ষর হিসাবে পছন্দ করেন তবে আপনাকে 0xআলাদাভাবে কোড করতে হবে :0x%X । অন্যান্য ফর্ম্যাট সংশোধক অবশ্যই প্রয়োজন হিসাবে যুক্ত করা যেতে পারে।
ঠিকানা মুদ্রণের জন্য <inttypes.h>শিরোনাম এবং uintptr_tপ্রকার এবং PRIXPTRম্যাক্রো ফর্ম্যাটটি ব্যবহার করুন :
#include <inttypes.h>
#include <stdio.h>
int main(void)
{
void *address = &address; // &address has type void ** but it converts to void *
printf("Address 0x%.12" PRIXPTR "\n", (uintptr_t)address);
return 0;
}
উদাহরণ আউটপুট:
Address 0x7FFEE5B29428
দৈর্ঘ্যে আপনার বিষ চয়ন করুন - আমি দেখতে পেয়েছি যে ম্যাকের চলমান ম্যাকোসগুলিতে ঠিকানাগুলির জন্য 12 এর যথার্থতা ভাল কাজ করে। .সর্বনিম্ন নির্ভুলতা (অঙ্কগুলি) নির্দিষ্ট করার জন্য এর সাথে একত্রিত হয়ে এটি নির্ভরযোগ্যভাবে ঠিকানাগুলিকে ফর্ম্যাট করে। আপনি যদি নির্ভুলতা 16 এ সেট করেন তবে ম্যাকের উপরে আমার অভিজ্ঞতায় অতিরিক্ত 4 ডিজিট সর্বদা 0 থাকে তবে অবশ্যই 12-র পরিবর্তে 16 ব্যবহারের জন্য অবশ্যই একটি ক্ষেত্রে তৈরি করা যেতে পারে 64-বিট কোডে (তবে আপনি 8 এর জন্য ব্যবহার করবেন 32-বিট কোড)।
0x%.8X? এটি শূন্যের সাথে সীসা পূরণ করবে । (এটি0xকেবল একটি উপস্থাপিকা, তবে আপনার সম্ভবত এটি সম্পর্কে অবহিত রয়েছে)।