http://blog.sina.com.cn/s/blog_61eff1c70100gh21.html
把十进制数转换成十六进制后如何分割高低字节
今天公司的项目,遇到一个问题:要把云台输入转动角度转换成十六进制后把高地位分开赋给另外两个参数,比如90°(云台协议规定要计算9000即输入的100倍的十六进制),9000的十六进制是2328,有两个变量angle1,angle2,应该得到angle1=0x23,angle=0x28;那么怎么实现呢?
刚开始上网搜到说有个函数
sprintf() 格式化输出函数(图形)
功能: 函数sprintf()用来作格式化的输出。
用法: 此函数调用方式为int sprintf(char *string,char *format,arg_list);
说明: 函数sprintf()的用法和printf()函数一样,只是sprintf()函数给出第一个参数string(一般为字符数组),然后再调用outtextxy()函数将串里的字符显示在屏幕上。arg_list为参数表,可有不定个数。通常在绘图方式下输出数字时可调用sprintf()函数将所要输出的格式送到第一个参数,然后显示输出。
我试着编写程序如下:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned char
int main() {
}
问题是,sprintf输出的是char*类型,比如本例是"2328",如果在用atoi函数只是转换为整数2328,分割后的angle1,angle2存储的是整数23,28完全不对。
后来经过思考和讨论想到了移位,果然是灵丹妙药啊:
int main() {
}
注释掉的句子可以代替其下面一句,但是明显移位是最牛逼的方法。