举例
3
:(续例
1
)字符
‘a’
,它对应的
16
进制为
61
,若要在屏幕输出
两个字符
6
和
1
,需要将
‘a’
转化为两个字符,这两个字符的
ASCII
码为
0011 0110
,
0011 0001
。
举例
4
:字符
‘o’
,它对应的
16
进制为
6F
,若要在屏幕输出两个字符
6
和
F
,需要将
‘o’
转化为两个字符,这两个字符的
ASCII
码为
0011 0110
,
0100 0110
。
unsigned char* Char2Hex(unsigned char ch){
unsigned char byte[2],i;
static unsigned char szHex[2];
byte[0] = ch/16; //
获得
ch
字符(
8
位)的上四位
byte[1] = ch%16; //
获得
ch
字符(
8
位)的下四位
for(i=0; i<2; i++){
if(byte[i] >= 0 && byte[i] <= 9)
szHex[i] = '0' + byte[i];
szHex[i] = 'a' + byte[i] - 10;
return &szHex[0];
void main (){
unsigned char* char_buff;
char_buff = Char2Hex('o');
cout<<char_buff[0]<<endl;
cout<<char_buff[1]<<endl;
system("pause");
根据
2.1
节的获取
8
进制字符的上
4
位、下
4
位的方法,我联想到了一个新的方法来获取其
16
进制的字符。结果同
2.2
节,但原理很简单:
举例
5
:字符
‘o’
,它的
ASCII
码为
0110 1111
,上四位
0110
,下四位
1111
,
这两个二进制对应的
十进制
分别为
6
和
15
。
只需将
6
和
15
通过一个
unsigned char
数组进行映射即可获得两个字符
6
和
F
。
这个
unsigned char
数组的构造为:
char_map[17] = "0123456789ABCDEF";
具体代码如下。结果与
2.2
节一致。
//
用一个字符数组做映射
unsigned char char_map[17] = "0123456789ABCDEF";
//unsigned char char_map[16] = {'0','1','2','3','4','5','6','7','8','9',
// 'A','B','C','D','E','F'};
//
核心函数
仍然是
2.1
节中的代码
unsigned char* Char2(unsigned char ch){
static unsigned char szHex[2];
szHex[0] = ch/16;
szHex[1] = ch%16;
return &szHex[0];
//
调试部分
void main (){
unsigned char* char_buff;
char_buff = Char2('o');
//
这里将
char
类型的
char_buff
当数使用
cout<<char_map[char_buff[0]]<<endl;
cout<<char_map[char_buff[1]]<<endl;
system("pause");
举例
6
:字符
‘a’
,它对应的
ASCII
码为
0011 0110
,没错我就是要在屏幕上输出
0011 0110
!!!
具体的代码贴在下面,注释写的很清楚,需要的话可以仔细研究一下。
其实这与“中序二叉树遍历“算法类似
//
核心函数
// ch:
传入的字符
; n:
除数,n:除数,它等于当前ch可能到的最大值的根;
// m:
指针,用于索引数组
,
初始值为
0; out_bin[]
:输出的二进制字符串
void Char2Bin(unsigned char ch,int n, int *m, unsigned char out_bin[]){
if (n>4){
// ch/n
和
ch%n
是为
4
位的二进制
(
最大值可以用
4
位的二进制表示,实际它还是
unsigned char
类型的,占用
8
位
)
//
要获取
4
位二进制的上
2
位和下二位,除数
n=2^(4/2)=4
Char2Bin(ch/n,n/4,m,out_bin);
Char2Bin(ch%n,n/4,m,out_bin);
else if (n>2){
// ch/n
和
ch%n
是
2
位的二进制
//
要获取它的上
1
位和下一位,除数
n=2^(2/2)=2
Char2Bin(ch/n,n/2,m,out_bin);
Char2Bin(ch%n,n/2,m,out_bin);
else{
//
当前
ch
是
2
位的二进制
,
只需将其转化为
0
和
1
即可
out_bin[(*m)++] = ch/2 + '0';
out_bin[(*m)++] = ch%2 + '0';
return; //
到这里必须返回,否则都会运行最后一行再返回,造成冗余
out_bin[8] = '\0'; //
字符数组最后以
'\0'
结尾就会变成字符串
,
//
可以参考
http://www.runoob.com/cplusplus/cpp-strings.html
//
调试部分
void main (){
unsigned char out[9];
int m = 0;
Char2Bin('a',16,&m,out); //
当前
ch
是
8
位的二进制
,
要获取
ch
的上
4
位和下
4
位
,
所以除数
n=2^(8/2)=16
cout << out << endl;
system("pause");
如果你觉得文章写得还不错,
欢迎打赏、关注、收藏本站。
对于文章内容,博主尽量做到真实可靠,并对所引用的内容附上原始链接。但也会出错,如有问题,欢迎留言交流~
若标题前没有“[转]”标记,则代表该文章为本人(司徒鲜生)所著,
转载及引用请注明出处,谢谢合作!
本站首页: