十进制,十六进制,BCD码相互转换C程序

十进制,十六进制,BCD码相互转换C程序
十进制,十六进制,BCD码相互转换C程序

本人用过的十六进制、BCD码之间的转换C程序,还有十进制的,可以参考使用,

#include

#include

/////////////////////////////////////////////////////////

//

//功能:十进制转十六进制

//

//输入:int dec 待转换的十进制数据

// int length 转换后的十六进制数据长度

//

//输出:unsigned char *hex 转换后的十六进制数据

//

//返回:0 success

//

//思路:原理同十六进制转十进制

//////////////////////////////////////////////////////////

int DectoHex(int dec, unsigned char *hex, int length)

{

int i;

for(i=length-1; i>=0; i--)

{

hex[i] = (dec%256)&0xFF;

dec /= 256;

}

return 0;

}

/////////////////////////////////////////////////////

//

//功能:二进制取反

//

//输入:const unsigned char *src 二进制数据

// int length 待转换的二进制数据长度

//

//输出:unsigned char *dst 取反后的二进制数据

//

//返回:0 success

//

//////////////////////////////////////////////////////

int convert(unsigned char *dst, const unsigned char *src, int length) {

int i;

for(i=0; i

{

dst[i] = src[i]^0xFF;

}

return 0;

}

//////////////////////////////////////////////////////////

//

//功能:十六进制转为十进制

//

//输入:const unsigned char *hex 待转换的十六进制数据

// int length 十六进制数据长度

//

//输出:

//

//返回:int rslt 转换后的十进制数据

//

//思路:十六进制每个字符位所表示的十进制数的范围是0 ~255,进制为256 // 左移8位(<<8)等价乘以256

//

/////////////////////////////////////////////////////////

unsigned long HextoDec(const unsigned char *hex, int length)

{

int i;

unsigned long rslt = 0;

for(i=0; i

{

rslt += (unsigned long)(hex[i])<<(8*(length-1-i));

}

return rslt;

}

///////////////////////////////////////////////////////// //

//功能:求权

//

//输入:int base 进制基数

// int times 权级数

//

//输出:

//

//返回:unsigned long 当前数据位的权

//

////////////////////////////////////////////////////////// unsigned long power(int base, int times)

{

int i;

unsigned long rslt = 1;

for(i=0; i

rslt *= base;

return rslt;

}

///////////////////////////////////////////////////////// //

//功能:BCD转10进制

//

//输入:const unsigned char *bcd 待转换的BCD码// int length BCD码数据长度

//

//输出:

//

//返回:unsigned long 当前数据位的权

//

//思路:压缩BCD码一个字符所表示的十进制数据范围为0 ~ 99,进制为100 // 先求每个字符所表示的十进制值,然后乘以权

//////////////////////////////////////////////////////////

unsigned long BCDtoDec(const unsigned char *bcd, int length) {

int i, tmp;

unsigned long dec = 0;

for(i=0; i

{

tmp = ((bcd[i]>>4)&0x0F)*10 + (bcd[i]&0x0F);

dec += tmp * power(100, length-1-i);

}

return dec;

}

/////////////////////////////////////////////////////////

//

//功能:十进制转BCD码

//

//输入:int Dec 待转换的十进制数据

// int length BCD码数据长度

//

//输出:unsigned char *Bcd 转换后的BCD码

//

//返回:0 success

//

//思路:原理同BCD码转十进制

//

//////////////////////////////////////////////////////////

int DectoBCD(int Dec, unsigned char *Bcd, int length)

{

int i;

int temp;

for(i=length-1; i>=0; i--)

{

temp = Dec%100;

Bcd[i] = ((temp/10)<<4) + ((temp%10) & 0x0F);

Dec /= 100;

}

return 0;

}

int main()

{

register int i;

unsigned char tmp_bff[12] = "";

//十六进制转十进制

unsigned char HEX[4] = {0x34, 0xFE, 0x3E, 0xFF};

unsigned long dec_hex = 0;

dec_hex = HextoDec(HEX, 4);

printf("dec_hex = %d\n", dec_hex);

//十进制转十六进制

DectoHex(dec_hex, tmp_bff, 4);

for(i=0; i<5; i++)

{

printf("tmp_bff[%d] = 0x%02X\n",i, tmp_bff[i]);

}

//BCD码转十进制

unsigned long dec_bcd = 0;

unsigned char BCD[4] = {0x98, 0x23, 0x45, 0x78};

dec_bcd = BCDtoDec(BCD, 4);

printf("dec_bcd = %d\n", dec_bcd);

//十进制转BCD码

DectoBCD(dec_bcd, tmp_bff, 4);

for(i=0; i<5; i++)

{

printf("tmp_bff[%d] = 0x%02X\n", i, tmp_bff[i]);

}

getchar();

}

GPS怎么把经纬度转换成标准的度分秒单位

其计算公式应是:任何一个十进制数表示的经、纬度数,其整数即是度数,其小数部分乘以60得到的数的整数部分即是分数,再用该数的小数部分乘以60 得到的数就是秒数。例:36.12432314转换成度分秒的数是:其度数是"36",其分是 "0.12432314×60=7.4593884"的整数"7",其秒是 "0.4593884×60=27.5639304","27.6"----36°7′27.6〃。 计算原理:保留取整部分,小数×60 经度:14° 0.32×60=19.2 --》19′ 0.2×60 =1.2 --》1.2〃 即:14°19′12〃同理,纬度:52.20 =52°12′0 经纬度的表示 1884年国际经度会议规定,以通过英国伦敦格林威治天文台子午仪中心的经线为0°经线。从0°经线往东叫东经,往西叫西经,东、西各分180°。习惯上以西经20°和东经160°为分界把地球分为东西两个半球。假如从地轴的正中间将地球切成南北两半,上边的一半叫北半球,下边的一半叫南半球。被切的这个平面,叫赤道面。赤道面与地球表面相交的线叫赤道。纬线从赤道往两极越来越短,到了两极就缩小成一个点了。科学家们把赤道定为0°纬线,从赤道向两极各分为90°,赤道以南叫南纬,赤道以北叫北纬。在计算机或GPS上经纬度经常用度、分、秒和度.度、分.分、秒.秒的混合方式进行表示,度、分、秒间的进制是60进制,度.度、分.分、秒.秒的进制是100进制,换算时一定要注意。可以近似地认为每个纬度之间的距离是不变的111KM,每分间1.85KM,每秒间31.8M。经度间的距离随纬度增高逐渐减小,可按一下公式计算: 经度1°长度=111.413cosφ一0.094cos3φ公里(纬度φ处)。 一般从GPS得到的数据是经纬度。经纬度有多种表示方法。 1.) ddd.ddddd,度 . 度的十进制小数部分(5位)例如:31.12035o 2.)ddd.mm.mmm,度 . 分 . 分的十进制小数部分(3位)例如31o10.335' 3.) ddd.mm.ss, 度 . 分 . 秒例如 31o12'42" 地球上任何一个固定的点都可以用确定的经纬度表示出来。

十进制与度分秒转换

2010年8月21日Surda发表评论阅读评论 在正弦表达式SIN(a) 中,我们知道 a 代表是弧度数。 那计算角度30°正弦值公式为:=SIN(RADIANS(30)),由此知道函数RADIANS()可以将角度转化成弧度。 但在实际的工程测量中用到的是度、分、秒(如:126°12′36″)来记录并进行计算的,在Excel 中怎样用这些数据进行计算? 首先来了解下何为度、分、秒制? 什么是“度分秒”:把一個周角分成三百六十等份,每一份稱為一度的角。再把一度分成六十等份,每一份叫做一分。把一分再分成六十等份,每一份叫做一秒。所以一個周角等於360°,一度等於六十分,一分等於六十秒。 /*—–度、分、秒制﹝Sexagesimal System﹞是古希臘數學家托勒密﹝約85-165﹞採用了巴比倫人的六十進制而建立的。在他編寫的《天文集》這本書中,他把周角分成三百六十等份,每一份叫一度。同時他還把半徑先分為60等份,每一份又分為60個小份,每一小份再等分成六十個更小的份。至於用「°」「’」「‖」分別來表示度、分、秒,是1570年卡拉木開始用的,這已是在托勒密之後1400多年的事了。—–*/ 按”度分秒”定义的常规互换方法 度分秒–度 110°10’10‖= 110+10÷60+10÷3600 = 110.16944444444444444444444444444° 度–度分秒 110.16944444444444444444444444444° 得度=110°

(110.16944444444444444444444444444-110)×60=10.16666666666666666666 6666666667 得分=10’ (10.166666666666666666666666666667-10)×60=10 得秒=10‖ 知道了运算原理,我们来看在Excel中度、度分秒是如何互换计算? 如图是通过公式并设置Excel 单元格格式实现的角度与―度分秒‖之间在的转换。 B2=A2/24设置B2单元格格式为自定义[h]“°”mm”′”ss”″” C2=B2*24设置C2单元格格式为自定义G/通用格式”°” 可以看出Excel把角度、度分秒互换直接采用时间格式处理方式。所以Excel中角度、度分秒互换 方法一: 度分秒=度数÷24 度数=度分秒×24 方法二:文本公式实现继续看上图 B3=TEXT(A3/24,‖[h]°mm′ss″‖) C3=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B3,‖°‖,‖:‖),‖′‖,‖:‖),‖″‖,)*24

十进制与度分秒转换

2010年8月21日Surda 在正弦表达式SIN(a) 中,我们知道 a 代表是弧度数。 那计算角度30°正弦值公式为:=SIN(RADIANS(30)),由此知道函数RADIANS()可以将角度转化成弧度。 但在实际的工程测量中用到的是度、分、秒(如:126°12′36″)来记录并进行计算的,在Excel 中怎样用这些数据进行计算 首先来了解下何为度、分、秒制 什么是“度分秒”:把一個周角分成三百六十等份,每一份稱為一度的角。再把一度分成六十等份,每一份叫做一分。把一分再分成六十等份,每一份叫做一秒。所以一個周角等於360°,一度等於六十分,一分等於六十秒。 /*—–度、分、秒制﹝Sexagesimal System﹞是古希臘數學家托勒密﹝約85-165﹞採用了巴比倫人的六十進制而建立的。在他編寫的《天文集》這本書中,他把周角分成三百六十等份,每一份叫一度。同時他還把半徑先分為60等份,每一份又分為60個小份,每一小份再等分成六十個更小的份。至於用「°」「’」「”」分別來表示度、分、秒,是1570年卡拉木開始用的,這已是在托勒密之後1400多年的事了。—–*/ 按”度分秒”定义的常规互换方法 度分秒–度 110°10’10”= 110+10÷60+10÷3600 = ° 度–度分秒

° 得度=110° ×60= 得分=10’ ×60=10 得秒=10” 知道了运算原理,我们来看在Excel中度、度分秒是如何互换计算 如图是通过公式并设置Excel 单元格格式实现的角度与“度分秒”之间在的转换。 B2=A2/24设置B2单元格格式为自定义[h]“°”mm”′”ss”″” C2=B2*24设置C2单元格格式为自定义G/通用格式”°” 可以看出Excel把角度、度分秒互换直接采用时间格式处理方式。所以Excel中角度、度分秒互换 方法一: 度分秒=度数÷24 度数=度分秒×24 方法二:文本公式实现继续看上图

相关文档
最新文档