شماره جادویی چیست؟
شمارههای جادویی به طور عادی برای کاربران قابل مشاهده نیستند. اما کاربران میتوانند به راحتی و با استفاده از یک ویرایشگر hex که به طور تخصصی برای نمایش و تغییر هر بایت از یک فایل طراحی شده به مشاهده این عدد بپردازند.
برای فرمتهای معروف فایلها، شمارهها به طور قراردادی نام نوع فایل را معرفی میکنند. از این رو برای مثال، شماره جادویی فایلهای عکس GIF۸۷a که به طور گستردهای مرسوم هستند در نمایش هگزادسیمال (یا همان مبنا ۱۶) به صورت ۰x۴۷۴۹۴۶۳۸۳۷۶۱ نمایش داده میشوند که با ترجمهاش به ASCII مقدار GIF۸۷a بازگردانده میشود. ASCII یک de facto standard (استانداردی که بجای تایید شدن توسط یک سازمان استاندارد، به دلیل استفادهٔ زیاد از آن به یک استاندارد تبدیل شده) است که توسط کامپیوترها و تجهیزات ارتباطی برای کدگشایی کاراکترها (از جمله الفبا، اعداد و... ) مورد استفاده قرار میگیرد.
همچنین شماره جادویی تصویری که با GIF۸۹a ارائه میشود ۰x۴۷۴۹۴۶۳۸۳۹۶۱ است. برای هر دو نوع از فایلهای GIF (Graphic interchanger Format) شماره جادویی شش بایت اول فایل را پر میکند. و پس از آن اطلاعات اضافه اصلی در مورد فایل (نظیر متادیتاها) افزوده میشوند.
به همین صورت شماره جادویی مرسوم مورد استفاده توسط فایلهای تصویری JPEG (Joint Photographic Experts Group) برابر ۰x۴A۴۶۴۹۴۶ است، که از نظر ASCII برابر است با JFIF (JPEG File Interchange Format). به هر حال شماره جادویی JPEG بایتهای اولیه فایل نیستند. آنها از بایت هفدهم آغاز میشوند. نمونههای دیگر از این دست شامل ۰x۴D۵۴۶۸۶۴ برای فایلهای MIDI (Musical Instrument Digital Interface)، و۰x۴۲۵a۶۸۳۱۴۱۵۹۲۵ برای فایلهای فشرده شده با bzip۲ است.
شمارههای جادویی همیشه برابر با نام خود در فرمت ASCII نیستند، یا حتی چیزی شبیه به آن. برای مثال، در بعضی از انواع فایلها آنها نام توسعه دهندهٔ آن نوع فایل را نشان میدهند. همچنین برای حداقل یکی از این شمارههای جادویی تاریخ تولد توسعه دهندهٔ آن فرمت نشان داده میشد.
برنامههای مختلفی از شمارههای جادویی برای تشخیص نوع فایل استفاده میکنند. یکی از آنها خط فرمان است که نوع برنامهها از روی نامشان مشخص میشود.
اگرچه آنها میتوانند کاربردی هم باشند، شمارههای جادویی همیشه برای تشخیص نوع فایل استفاده نمیشوند. دلیل اصلی این است که بعضی از انواع فایلها دارای شماره جادویی نیستند، برای مثال فایلهای متنی ساده، که مثلا HTML، XHTML و XML را به عنوان سورس کد در خود دارند.
خوشبختانه، راههای دیگری نیز وجود دارد تا برنامهها با استفاده از آنها به نوع فایلها پی ببرند. یکی نگاه کردن به نوع چینش کاراکترهای فایل (مثلا ASCII) است تا ببینند یک فایل متنی است یا خیر. اگر مشخص شد که یک فایل متنی است، میتوان با نگاه به سرآیند فایل دید که از چه نوع نشانگری برای مثال برای HTML و #! (موسوم به شیبنگ) برای اسکریپتها استفاده میکند.
نوع دیگر تشخیص نوع فایل، استفاده از پسوندهاست (مثل .exe, .html, .jpg و ...) که در سیستم عاملهای مایکروسافتی لازم است و برای بخش کوچکی از لینوکسها و سیستمهای شبه یونیکس مورد استفاده قرار میگیرد. به هر حال مشکل این روش آن است که ممکن است که کاربر به طور اتفاقی پسوند فایل را عوش کند، که در این صورت فهمیدن نوع فایل بسیار سخت میشود.
و یک راه دیگر که در بسیاری از سیستم فایلهای رایج ممکن است، استفاده از اطلاعات نوع فایل که در متادیتای هر فایل ضمیمه شده است میباشد. در سیستمعاملهای شبه یونیکس، این متادیتاها در inodeها (ساختار دادهای سیستم فایلهای یونیکس بیس که تمامی اطلاعات مربوط به فایل به جز نام و دادهٔ اصلی را در خود ذخیره میکنند) جای میگیرند، (یک راه موثر برای ذخیرهٔ اطلاعات).
شمارههای جادویی به این علت جادویی خوانده میشوند که مفهوم و خاصیت مقادیرشان، بدون دانستان اطلاعات اضافی نامعلوم است. شمارههای جادویی همچنین در برنامه نویسی برای اشاره به ثابتهایی که برای هدفی خاص در نظر گرفته شدهاند ولی دلیل و یا مقدار وجودیشان بدون اطلاعات اضافه قابل دریافت نیست مورد استفاده قرار میگیرد.