一個十六進制數:D2 A3
1.要轉換成二進制
2.二進制取反
3.取反后末尾加1.
4.判斷是否為負數,如把D2(十進制為210)轉換為十進制,然后判斷 if( 210 >127 ) 大于為正數,反之為負數
是不是二進制數存入到char資料中,然后一位一位比較,是這樣處理嗎?
uj5u.com熱心網友回復:
二進制數要轉成十進制數,得要去讀二進制數的每一位uj5u.com熱心網友回復:
僅供參考:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
int main() {
int i,v;
char bs[33];
char b[33];
char hs[9];
char h[9];
char s[4];
char *e;
// 十進制整數轉二進制串;
i=1024;
ltoa(i,b,2);
sprintf(bs,"%032s",b);
printf("i=%d,bs=%s\n",i,bs);
// 十進制整數轉十六進制串;
i=1024;
ltoa(i,h,16);
sprintf(hs,"%08s",h);
printf("i=%d,hs=%s\n",i,hs);
// 十六進制字串轉成十進制數
strcpy(hs,"00000400");
sscanf(hs,"%x",&i);
printf("hs=%s,i=%d\n",hs,i);
// 二進制字串轉化為十六進制字串;
strcpy(bs,"00000000000000000000010000000000");
i=strtol(bs,&e,2);
ltoa(i,h,16);
sprintf(hs,"%08s",h);
printf("bs=%s,hs=%s\n",bs,hs);
// 二進制字串轉化為十進制數;
strcpy(bs,"00000000000000000000010000000000");
i=strtol(bs,&e,2);
printf("bs=%s,i=%d\n",bs,i);
// 十六進制字串轉成二進制串
strcpy(hs,"00000400");
sscanf(hs,"%x",&i);
ltoa(i,b,2);
sprintf(bs,"%032s",b);
printf("hs=%s,bs=%s\n",hs,bs);
// ASC\GBK字串轉十六進制串
strcpy(s,"a漢");
i=0;
while (1) {
if (0==s[i]) break;
sprintf(hs+i*2,"%02X",(unsigned char)s[i]);
i++;
}
setlocale(LC_ALL,"chs");
printf("s=%s,hs=%s\n",s,hs);
// 十六進制字串轉成漢字(GBK)及字符(ASC)
strcpy(hs,"61BABA");
i=0;
while (1) {
if (1!=sscanf(hs+i*2,"%2x",&v)) break;
s[i]=(char)v;
i++;
}
s[i]=0;
printf("hs=%s,s=%s\n",hs,s);
return 0;
}
//i=1024,bs=00000000000000000000010000000000
//i=1024,hs=00000400
//hs=00000400,i=1024
//bs=00000000000000000000010000000000,hs=00000400
//bs=00000000000000000000010000000000,i=1024
//hs=00000400,bs=00000000000000000000010000000000
//s=a漢,hs=61BABA
//hs=61BABA,s=a漢
uj5u.com熱心網友回復:
不管是什么進制,數還是那個數,方法也還是那些方法D2如果是以字串的形式獲取到的
那就直接轉換成int進行相關操作即可
uj5u.com熱心網友回復:
是字符形式的 cstring,十六進制直接轉2進制,然后進行取反,然后取反加1進行計算吧
uj5u.com熱心網友回復:
1.計算機中存放數字用的是補碼,負數的補碼轉原碼才會取反加1,正數的補碼等于原碼2.16進制的好處在于可以還原二進制位的情況,每個16進制位與4個二進制位一一對應
3.給你一個16進制數,你要判斷是正數還是負數,你必須要知道這個數原本是多少位的,關鍵的來了:
D2A3對應的二進制位是32位:
?1101001010100011?
如果用32位int去存放它,那么最高位是1,表示他是負數,如果用64位的longlong去存放它,那么他是正數,因為最高位是0,所以你要根據一個字串的16進制去轉數字,你先要知道這個數是多少位的,比如你要轉int 32那么可以這么做:
#include "stdafx.h"
#include "string.h"
int HexToInt32(const char* s)
{
int nRet = 0;
int nLen = strlen(s);
for(int x = 0; x < nLen; ++x)
{
int p = s[x];
switch(p)
{
case '0': p = 0x0; break;
case '1': p = 0x1; break;
case '2': p = 0x2; break;
case '3': p = 0x3; break;
case '4': p = 0x4; break;
case '5': p = 0x5; break;
case '6': p = 0x6; break;
case '7': p = 0x7; break;
case '8': p = 0x8; break;
case '9': p = 0x9; break;
case 'A': p = 0xA; break;
case 'B': p = 0xB; break;
case 'C': p = 0xC; break;
case 'D': p = 0xD; break;
case 'E': p = 0xE; break;
case 'F': p = 0xF; break;
}
int nShift = (nLen - 1 - x) * 4;
nRet |= p << nShift;
}
return nRet;
}
int _tmain(int argc, _TCHAR* argv[])
{
const char* strHex = "D2";
int n = HexToInt32(strHex);
printf("Hex:%s --> Dec:%d", strHex, n);
getchar();
return 0;
}
沒用C的直接轉換函式是為了展示整個轉換程序,HexToInt32()這個函式要求16進制字串必須為大寫,你需要小寫的判斷可以再switch里面加
uj5u.com熱心網友回復:
上述有筆誤,是16位存放與32位存放轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/116853.html
標籤:基礎類
上一篇:FindResource 的問題
