1. 程式人生 > >大數進位制轉化--通過位移

大數進位制轉化--通過位移

僅突出運算,資料長度可根據需要擴充套件

在運算環境不支援long long時編寫

//========================================
//== 函 數 名:BCD2HEX
//== 功   能 :六個位元組的壓縮BCD碼轉換成十六進位制
//== 說   明 :適用於linux以及微控制器,VS環境待測試
//== 引數:bcd[6]:待轉換資料;hexa[8]:十六進位制
//=========================================
int BCD2HEXA( unsigned char bcd[6], unsigned char hexa[8])
{
    unsigned long temp[3] = {0,0,0};     
    unsigned char result[9] ;
    unsigned char tmp;
    int i ;
    //將bcd碼轉成十進位制數存放在陣列中
    for ( i = 0 ; i < 6; i ++ ) {
        temp[0] *= 100;
        temp[1] *= 100;
        temp[2] *= 100;    
         temp[0] +=  bcd[i];         
        tmp = temp[0]  >> 24;
        temp[0] &= 0xFFFFFF;
        temp[1] += tmp;
        tmp = temp[1]  >> 24;
        temp[1] &= 0xFFFFFF;
        temp[2] += tmp;
    }
    //位移 相當於取餘運算。例如: 27%16 == 11  ——  27 & 0xf    
    for( i = 0 ; i < 3 ; i ++ ) {    
        result[i] = temp[0]; temp[0] >>= 8;    
        result[i + 3 ] = temp[1];temp[1] >>= 8;    
        result[ i + 6] = temp[2]; temp[2] >>= 8;
    }
    

   //位元組序倒置
    for (i = 0; i < 4; i++) { 
            tmp = result[i];
            result[i] = result[7-i];
            result[7-i] = tmp;
    }
    memcpy(hexa,result,8);//結果是低位在前的順序陣列
    return 0;
}

相關推薦

大數轉化--通過位移

僅突出運算,資料長度可根據需要擴充套件 在運算環境不支援long long時編寫 //======================================== //== 函 數 名:BCD2HEX //== 功   能 :六個位元組的壓縮BCD碼轉換成十六進位制

大數問題之26轉化

杭電2100Lovekey Problem DescriptionXYZ-26進位制數是一個每位都是大寫字母的數字。 A、B、C、…、X、Y、Z 分別依次代表一個0 ~ 25 的數字,一個 n 位的26進位制數轉化成是10進位制的規則如下A0A1A2A3…An-1 的每一

關於Java實現的轉化運算)

一、需求: 最近在做檔案傳輸的東西,檔案傳輸當然是傳輸很重要,包括編碼格式以及進位制的統一。 簡略的說一下這次做的東西:首先檔案是按照塊來發送的,一塊一塊大的發,但是,傳送的過程是這樣的; 先發送頭部,頭部包括三部分:1.一個int型別的檔案Id,               2.一個long型別的偏

其他轉化為10和10轉化為其他(均一個函式)c++

今天專門抽出來一點時間來弄一下,進位制轉化的問題,不論是其他進位制轉化為10進位制還是10進位制轉化為其他進位制,均使用同一個函式來完成,只需要手動輸入從哪個進位制轉化為哪個進位制。 程式碼如下: #include <iostream> #include <cmat

python中將十六轉化為二進位制、python中變更button的text和bg

    def SpeedTobyte(self):         #print(self.Eabs.get())         byte = float(self.Eabs.get())/0.0

將16轉化為字串

//功能:將16進位制轉換成字串 //時間:2018年9月13日  #include "stdio.h" #include "string.h" char data[5]={0x12,0xfe,0x5b}; char input[10]; int main(void) {

Palindromic Squares 迴文平方數 (迴文數 + 轉化

Description 迴文數是指從左向右念和從右向左念都一樣的數。如12321就是一個典型的迴文數。 給定一個進位制B(2<=B<=20,由十進位制表示),輸出所有的大於等於1小於等於300(十進位制下)且它的平方用 B 進製表示時是迴文數的數。用’A’,’B

看呀藍芽串列埠通訊中的16轉化

//16string-byte      public static byte[] HexCommandtoByte(byte[] data) {          if (data == null) {  

c++編寫十六轉化為二進位制

#include #include using namespace std; int main() { int f,c; char e; string hexDigit; cin>>hexDigit; for(int f=0;f<=hexDig

C語言資料結構用 棧 實現轉化

直接上程式碼,思路看註釋; /*棧實現進位制轉化 *十進位制最大轉化為36進位制用10(A)-35(Z)表示 */ #include<stdio.h> #include<malloc.h> #include<stdlib.h> #

HDU 6034 Balala Power!(大數)

Talented Mr.Tang has n strings consisting of only lower case characters. He wants to charge them with Balala Power (he could change each character rang

Problem 07. 轉化問題

Problem 07. 進位制轉化問題 題目簡述:     輸入一個十進位制數N,將它轉換成R進位制數輸出。 解題思路: 先將十進位制數不斷除R取餘並放入陣列中,第一個得到的餘數是最高位,所以逆序輸出,再加上正負號判斷即可。 細節處理: &nbs

10VS二進位制——大整數轉化

題目描述    對於一個十進位制數A,將A轉換為二進位制數,然後按位逆序排列,再轉換為十進位制數B,我們乘B為A的二進位制逆序數。     例如對於十進位制數173,它的二進位制形式為10101101,逆序排列得到10110101,其十進位制數為181,181即為173的二進

使用棧實現轉換(java大數轉換)

Problem A: 使用棧實現進位制轉換 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 35  Solved: 19 [Submit][Status][Web Board] Description 使用棧將一個很

關於Java二進位制和十六轉化的一點問題

    今天在學習Spring Security在做密碼加密配置時,有個地方需要做一個二進位制和十進位制的轉化,自己便隨手寫了一個,沒想到,在運行了幾次之後始終驗證不過,鬱悶的不行,由於我用的是Spring Security框架的驗證策略,所以一時間也不知道錯在什麼地方,於

16轉化為顏色

16進位制轉化為相應的顏色的巨集 #define UIColorFromRGB(rgbValue,A) [UIColor colorWithRed:((float)((rgbValue &0xFF0000) >> 16))/255.0 green:

Spreadsheets(二十六轉化)

In the popular spreadsheets systems (for example, in Excel) the following numeration of columns is used. The first column has number A, th

Python中各種之間的轉化

1.十進位制轉化為其它進位制 (1)bin(x):十進位制轉化為二進位制 【例項1】 x=bin(20)   # x的值為字串'0b10100' (2)oct(x):十進位制轉化為八進位制 【例項2】 x=oct(20)   # x的值為字串

二進位制,十進位制,十六互相轉化

二進位制轉化為十進位制:(1)從右向左數,確定所數的數字是第幾位(編號為n),轉化為十進位制的時候,用這個數乘以2的n-1次方,以此類推,將各個位上的數所得的式子相加即可,便得到了十進位制數。 特殊情況,如:二進位制數100,1000,10000,

20大數加法

地球人用十進位制是因為有十根手指,外星人有20根呢? #include <cstdio> #include <cstdlib> #include <iostream> #include <cstring> #include <cmat