8進位制字串轉16進位制字串(二)
//寫一個函式實現8進位制字串到16進位制字串的轉換 //例如: //輸入"755"結果是"1ED" //輸入"777777777777"結果是"FFFFFFFFF" (注意超過了32位) //答案2 //使用位段定義 #include <iostream.h> #include <string.h> struct tagDataForOctal { unsigned int n3Bit1:3; //表示一位8進位制數 unsigned int n3Bit2:3; unsigned int n3Bit3:3; unsigned int n3Bit4:3; }; struct tagDataForHex { unsigned int n4Bit1:4; //表示一位16進位制數 unsigned int n4Bit2:4; unsigned int n4Bit3:4; }; //8進位制字串轉16進位制字串 //注:要保證pHexStr指向記憶體空間的長度 bool ConvertOctalStrToHexStr(const char* pOctalStr, char* pHexStr) { //檢查 if (pOctalStr == NULL || pHexStr == NULL) { return false; } int nCount = 0; //獲取8進位制字串的長度 int nLength = strlen(pOctalStr); if (nLength % 4 == 0) { nCount = nLength/4; } else { nCount = nLength/4 + 1; } //申請記憶體空間 char* pszOctalBuffer = new char[nCount*4]; if (pszOctalBuffer == NULL) { return false; } memset(pszOctalBuffer, 0, nCount*4); //755 -> 5570 for (int i = 0; i < nLength; i++) { pszOctalBuffer[i] = pOctalStr[nLength - 1 -i]; } char* pszHexBuffer = new char[nCount*3]; if (pszHexBuffer == NULL) { return false; } memset(pszHexBuffer, 0, nCount*3); int nIndex = 0; tagDataForOctal DataForOctal; tagDataForHex* pDataForHex = NULL; for (i = 0; i < nCount*4; i+=4) { //清零 DataForOctal.n3Bit1 = 0; DataForOctal.n3Bit2 = 0; DataForOctal.n3Bit3 = 0; DataForOctal.n3Bit4 = 0; //給DataForOctal結構體賦值 if (pszOctalBuffer[i] != 0 && pszOctalBuffer[i] < '0' || pszOctalBuffer[i] > '7') { return false; } else if (pszOctalBuffer[i] != 0) { DataForOctal.n3Bit1 = pszOctalBuffer[i] - 48; } if (pszOctalBuffer[i+1] != 0 && pszOctalBuffer[i+1] < '0' || pszOctalBuffer[i+1] > '7') { return false; } else if (pszOctalBuffer[i+1] != 0) { DataForOctal.n3Bit2 = pszOctalBuffer[i+1] - 48; } if (pszOctalBuffer[i+2] != 0 && pszOctalBuffer[i+2] < '0' || pszOctalBuffer[i+2] > '7') { return false; } else if (pszOctalBuffer[i+2] != 0) { DataForOctal.n3Bit3 = pszOctalBuffer[i+2] - 48; } if (pszOctalBuffer[i+3] != 0 && pszOctalBuffer[i+3] < '0' || pszOctalBuffer[i+3] > '7') { return false; } else if (pszOctalBuffer[i+3] != 0 ) { DataForOctal.n3Bit4 = pszOctalBuffer[i+3] - 48; } //指標型別的轉換 pDataForHex = (tagDataForHex*)&DataForOctal; nIndex = i/4; if (pDataForHex->n4Bit1 >= 0 && pDataForHex->n4Bit1 <= 9) { pszHexBuffer[nIndex*3] = pDataForHex->n4Bit1 + 48; } else if (pDataForHex->n4Bit1 >= 10 && pDataForHex->n4Bit1 <= 15) { pszHexBuffer[nIndex*3] = pDataForHex->n4Bit1 + 55; } if (pDataForHex->n4Bit2 >= 0 && pDataForHex->n4Bit2 <= 9) { pszHexBuffer[nIndex*3+1] = pDataForHex->n4Bit2 + 48; } else if (pDataForHex->n4Bit2 >= 10 && pDataForHex->n4Bit2 <= 15) { pszHexBuffer[nIndex*3+1] = pDataForHex->n4Bit2 + 55; } if (pDataForHex->n4Bit3 >= 0 && pDataForHex->n4Bit3 <= 9) { pszHexBuffer[nIndex*3+2] = pDataForHex->n4Bit3 + 48; } else if (pDataForHex->n4Bit3 >= 10 && pDataForHex->n4Bit3 <= 15) { pszHexBuffer[nIndex*3+2] = pDataForHex->n4Bit3 + 55; } } //轉換 for (int j = 0; j < nCount*3; j++) { pHexStr[j] = pszHexBuffer[nCount*3 -1 - j]; } //沒考慮16進位制字串最高位為0的情況 340 ->0E0 0得去掉 //釋放記憶體空間 if (pszOctalBuffer != NULL) { delete[] pszOctalBuffer; pszOctalBuffer = NULL; } if (pszHexBuffer != NULL) { delete[] pszHexBuffer; pszHexBuffer = NULL; } return true; } int main(int argc, char* argv[]) { char *pszOCtrl = "340"; //結果 E0 //char *pszOCtrl = "555"; //char *pszOCtrl = "755"; //char *pszOCtrl = "777777777777"; char szHexBuffer[12] = {0}; if (ConvertOctalStrToHexStr(pszOCtrl, szHexBuffer) == false) { printf("Convert false"); } else { printf("%s\r\n", szHexBuffer); } return 0; }
相關推薦
8進位制字串轉16進位制字串(二)
//寫一個函式實現8進位制字串到16進位制字串的轉換 //例如: //輸入"755"結果是"1ED" //輸入"777777777777"結果是"FFFFFFFFF" (注意超過了32位) //答案2 //使用位段定義 #include <iostream.h>
c語言-10進位制字串轉16進位制字串
程式碼: #include <stdio.h> #include <string.h> #include <malloc.h> char *DecToHex(char *pHex,char *pDec,int Declen) { int
Java字串轉16 進位制工具類Hex.java
Java 字串轉 16 進位制工具類 Hex.java 實現 16進位制 0xfecd .. 和 java 字串之間的互轉換! 如果做開發,通常使用者登陸,網路請求可能會用 mad5(salt + pwd) 然後再將 md 之後的資料 hex 一下。 這個工具類,就是實現
16進位制字串轉16進位制數字
int tolower(int c) { if ((c >= 'A') && (c <= 'Z')) return c + ('a' - 'A'); return c; } int htoi(char s[]) { int i; i
python 字串轉16進位制數字
1 原始檔案中的字串2 讀取檔案字串從檔案中讀取2個位元組,程式碼如下:def print_hex_str(str1): print len(str1) print str1 print int(str1, 16) for i in str1:
java 字串轉16進位制(包含漢字)
public static String toChineseHex(String s) { String ss = s; byte[] bt = new byte[0]; tr
C#進階系列——MEF實現設計上的“鬆耦合”(二)
前言:前篇 C#進階系列——MEF實現設計上的“鬆耦合”(一) 介紹了下MEF的基礎用法,讓我們對MEF有了一個抽象的認識。當然MEF的用法可能不限於此,比如MEF的目錄服務、目錄篩選、重組部件等高階應用在這裡就不做過多講解,因為博主覺得這些用法只有在某些特定的環境下面才會用到,著實不太普遍,感覺沒有鑽下去的
【轉】VBA編程入門(二)
mat 復雜 任務 遙控 一次 環境 box range 使用 詳解VBA編程是什麽 由 vietdung90 創建,最後一次修改 2016-10-19 直到 90 年代早期,使應用程序自動化還是充滿挑戰性的領域.對每個需要自動化的應用程序,人們不得不學習一種不
[轉]numpy的函數使用(二):np.tile()
[] 而且 什麽 得出 基本數據類型 技術分享 圖片 理解 log 一、tile函數 1.函數的定義與說明 tile函數是模板numpy.lib.shape_base中的函數。 函數的形式是tile(A,reps) 函數參數說明中提到A和reps都是array_like的,
day 16 - 1 內建函式(二)
內建函式(二) reversed() 返回一個反向的迭代器 k = [1,2,3,4,5] k.reverse() #反轉 print(k) k = [1,2,3,4,5] k2 = reversed(k) #反向的迭代器 print(k2) for i in k2: pri
day 16 - 2 內建函式(二)練習
內建函式(二)練習 1、用map來處理字串列表,把列表中所有人都變成sb,比方alex_sbname=['alex','wupeiqi','yuanhao','nezha'] name=['alex','wupeiqi','yuanhao','nezha'] def func(n):
轉:QT實現陰影視窗(二)
從上一篇的效果可以看到視窗並不美觀,而且不能用滑鼠進行拖動,還不可以實現最大最小化。 要實現用滑鼠拖動可以,過載滑鼠點選和滑鼠移動事件的處理,具體如下: //GraphicDialog.h protected: void
char/byte陣列轉16進位制字串
// ConsoleApplication1.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { unsigned char char0xFF[16]
字串Ascll格式轉16進位制
之前做過一些專案需要用到ASCLL碼轉換到16進位制,在網上搜索後發現,大部分都是10進位制數字轉16進位制資料,這對於8位字元型別unsignal char (這裡不用char,因為char是-127到128,對於129-255之間的數溢位變為負數,算起
PHP之字串與16進位制ASCII互轉
//PHP中可以通過bin2hex函式將字串轉換成16進位制的形式輸出,bin2hex()函式返回結果為ascii碼 $string = "cfg_power"; $arr1 = str_spl
水題T,二進位制轉16進位制
輸入一個2進位制的數,要求輸出該2進位制數的16進製表示。 在16進位制的表示中,A-F表示10-15 Input第1行是測試資料的組數n,後面跟著n行輸入。每組測試資料佔1行,包括一個以0和1組成的字串,字串長度至少是1,至多是10000Outputn行,每行輸出對應一個輸入。Sampl
藍橋杯演算法題庫 進位制轉換_十進位制轉16進位制
藍橋杯演算法題庫 十進位制轉16進位制 題目 解題思路 題目 問題描述 十六進位制數是在程式設計時經常要使用到的一種整數的表示方式。 它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16個符號,分別表
php 二進位制轉16進位制 大數
//轉16進位制 <?php $mybit = '00100000010000000100011111001111001010110101100000010000101110011100011
DICOM檔案轉16進位制
話不多說直接上程式碼 package com.cn; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException;
android開發中遇到的進位制轉換,16進位制資料流轉和字串的相互轉換
最近開發的程式是利用無線網路,收發資料,其中,接收和傳送的格式是16進位制位元組陣列 byte[],而顯示到介面中則不可能把一堆的位元組流顯示出來。因此,需要進行一下轉換。 直接說轉換的演算法吧 一、16進位制位元組陣列轉換成字串 核心的語句就一句getSt