PDA

View Full Version : سوال: موضوع: تبدیل یک عدد 128 بیتی به 4 عدد 32 بیتی



sadeghi336
چهارشنبه 21 مرداد 1394, 10:07 صبح
سلام
من در نوشتن یک پروزه به مشکل برخورد کردم ممنون میشم کسی اگر میتونه کمکم کنه

یه برنامه نیاز دارم که یک عدد باینری 128 بیتی(16بایتی) دریافت کند، (مهم نیست حتما یک عدد 128 بیتی باشد.حداکثر 128 بیت، کمتر از 128 بیت بود با اضافه کردن صفر به 128 بیت تبدیل شود)
اون عدد را به 4 عدد 32 بیتی تبدیل کند و سپس اون 4 عدد 32 بیتی را دوتا به سمت چپ شیفت دهد. بعد این 4 عدد رو باز به یک عدد 128 بیتی تبدیل کند و خروجی بدهد.

ممنون میشم اگر کسی میتونه تو هر قسمتش بهم کمک کنه. واقعا نیاز دارم. ممنونم.
واقعا کسی نیست بتونه به این سوال جواب بده

Ananas
چهارشنبه 28 مرداد 1394, 02:30 صبح
سلام.
من متوجه نشدم هدف نهایی چیه ولی برای شیفت دادن و جمع و ضرب و ... میتونید از IntX.h استفاده کنید که ضمیمه میکنم در همین پست.
این برنامه ی محاسبات صحیح با تعداد بایت دلخواه هست(IntX). نمونه ی ضرب هم به صورت کنسول و خیلی مختصر نوشتم. میتونید راحت باهاش کار کنید و عدد با هر تعداد بایت رو شیفت بدید.
مشکلی داشتید بفرمایید.

sadeghi336
شنبه 31 مرداد 1394, 11:24 صبح
سلام.
من متوجه نشدم هدف نهایی چیه ولی برای شیفت دادن و جمع و ضرب و ... میتونید از IntX.h استفاده کنید که ضمیمه میکنم در همین پست.
این برنامه ی محاسبات صحیح با تعداد بایت دلخواه هست(IntX). نمونه ی ضرب هم به صورت کنسول و خیلی مختصر نوشتم. میتونید راحت باهاش کار کنید و عدد با هر تعداد بایت رو شیفت بدید.
مشکلی داشتید بفرمایید.



سلام دوست عزیز
من یه برنامه لازم دارم که ورودی آن یک عدد 128 بیتی (یا 256 بیتی) باشد و این برنامه مثلا برای ورودی 128 بیتی ، 128 بیت را به 4 تا 32 بیتی تفکیک کند بعد این بلاک های 32 بیتی را جابه جا کند(مثلا بلاک اول و سوم باهم جابه جا بشوند) بعد از این کار، 4 بلاک 32 بیتی حاصل را به هم متصل کند و باز یک 128 بیت حاصل را خروجی دهد.
ممنون میشم اگر کمکم کنی. باتشکر
صادقی

Ananas
یک شنبه 01 شهریور 1394, 01:13 صبح
خیلی راحت میتونید این کارو انجام بدید با همین IntX:

#include "IntX.h"
#include <iostream>
using namespace std;

int main()
{
int array_i32_count = 8;
__int32 * array_i32 = new __int32[8];
size_t sizeof_array_i32 = sizeof(__int32) * array_i32_count;
char * str = new char[512];
while (true)
{
cin >> str;
IntX_FromHexA( (void *)array_i32, sizeof_array_i32, str);
__int32 i32 = array_i32[0];
array_i32[0] = array_i32[4];
array_i32[4] = i32;
IntX_ToHexA( str, (void *)array_i32, sizeof_array_i32);
cout << str << endl;
};
return 0;
}

شما هر اشاره گری رو میتونید به عنوان عدد بفرستید به توابع IntX. فقط این مهمه که شما خودتون باید اعتبار اشاره گر و سایزش رو کنترل کنید.
توابع IntX از شما اشاره گر میخوان و سایز اطلاعاتتون. شما هم میخواید که قسمت های 32 بیتی داشته باشید. بخاطر همین من یک آرایه ی از __int32 رو تعریف کردم که بتونم قطعات 32 بیتی داشته باشم و اون آرایه رو به تابع IntX_FromHexA فرستادم برای تبدیل از متن هگزادسیمال به عدد و بعد جای دوتا عضو آرایه رو عوض کردم و بعد از تابع IntX_ToHexA استفاده کردم تا دوباره عدد رو به متن هگزادسیمال تبدیل کنم. میتونید به جای هگزادسیمال از ده دهی با تابع IntX_ToStr استفاده کنید.
با خوده توابع IntX هم میتونید شیفت بدید عدد رو و یا دو تا عدد رو با هم Or یا And کنید.

sadeghi336
یک شنبه 01 شهریور 1394, 13:32 عصر
واقعا ممنون.خیلی لطف کردید.