UltraDebug

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: A C D R G Y M Z X S P
公益项目,接受捐赠
查看: 2894|回复: 1
收起左侧

[C++] C/C++ 数据类型转换

[复制链接]
Bilibili

主题

0

回帖

UD

新手上路

UID
13
积分
24
注册时间
2022-1-16
最后登录
1970-1-1
2022-5-24 23:04:24 | 显示全部楼层 |阅读模式

ASCII 字符转int

现在我们准备看看如何将 ASCII 字符代码转换为 int 格式。 & 运算符非常适合转换。 如果一个数字字符存储在 char 变量 aChar 中,从下表中我们看到所需的操作是

十六进制字符 ASCII码 对应的int
0 0011 0000 0000 0000 0000 0000 0000 0000 0000 0000
1 0011 0001 0000 0000 0000 0000 0000 0000 0000 0001
2 0011 0010 0000 0000 0000 0000 0000 0000 0000 0010
3 0011 0011 0000 0000 0000 0000 0000 0000 0000 0011
4 0011 0100 0000 0000 0000 0000 0000 0000 0000 0100
5 0011 0101 0000 0000 0000 0000 0000 0000 0000 0101
6 0011 0110 0000 0000 0000 0000 0000 0000 0000 0110
7 0011 0111 0000 0000 0000 0000 0000 0000 0000 0111
8 0011 1000 0000 0000 0000 0000 0000 0000 0000 1000
9 0011 1001 0000 0000 0000 0000 0000 0000 0000 1001
a 0110 0001 0000 0000 0000 0000 0000 0000 0000 1010
b 0110 0010 0000 0000 0000 0000 0000 0000 0000 1011
c 0110 0011 0000 0000 0000 0000 0000 0000 0000 1100
d 0110 0100 0000 0000 0000 0000 0000 0000 0000 1101
e 0110 0101 0000 0000 0000 0000 0000 0000 0000 1110
f 0110 0110 0000 0000 0000 0000 0000 0000 0000 1111

上表:十六进制字符和对应的 int。 注意模式从“9”到“a”的变化。

十六进制数字

好吧,我们仍然有一个 8 位的值(四个高位为零),但我们稍后会处理这个问题。

接下来考虑上表中的字母十六进制数字。 该表仅显示了小写字母字符,但您在表 2.3 中看到低四位对于大写和小写字母字符是相同的。 我们可以使用相同的 & 运算来获得这四个位,然后将结果加 9:

aChar = 0x09 + (aChar & 0x0f);

从 8 位 char 类型到 32 位 int 类型的转换是通过 C 中的类型转换完成的。
生成的程序如下列代码所示。 请注意,我们使用 printf 函数以十六进制和十进制显示结果存储值。 从存储的 int 格式到十六进制显示的转换留作练习(练习 3-13)。

/* 
 * convertHex.c 
 * Asks user to enter a number in hexadecimal 
 * then echoes it in hexadecimal and in decimal. 
 * Assumes that user does not make mistakes. 
 * Bob Plantz - 4 June 2009 
 */ 

#include <stdio.h> 
#include <unistd.h> 

int main(void) 
{ 
    int x; 
    unsigned char aChar; 

    printf("Enter an integer in hexadecimal: "); 
    fflush(stdout); 

    x = 0;                           // initialize result 
    read(STDIN_FILENO, &aChar, 1);   // get first character 
    while (aChar != ’\n’)            // look for return key 
    { 
        x = x << 4;                  // make room for next four bits 
        if (aChar <= ’9’) 
        { 
            x = x + (int)(aChar & 0x0f); 
        } 
        else 
        { 
            aChar = aChar & 0x0f; 
            aChar = aChar + 9; 
            x = x + (int)aChar; 
        } 
        read(STDIN_FILENO, &aChar, 1); 
    } 

    printf("You entered %#010x = %i (decimal)\n\n", x, x); 

    return 0; 
}

上列代码:从键盘读取十六进制值。

UltraDebug免责声明
✅以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
✅The above content is forwarded or original by netizens. If there is infringement, please send the email to the destination 9003554@qq.com handle.
回复 打印

使用道具 举报

ultradebug

主题

0

回帖

UD

管理员

UID
1
积分
2338
注册时间
2021-12-20
最后登录
1970-1-1
2022-5-25 00:55:34 | 显示全部楼层
真棒。腻害 - ultradebug_UltraDebug
回复 打印

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|站点地图|UltraDebug ( 滇ICP备2022002049号-2 滇公网安备 53032102000034号)

GMT+8, 2025-6-18 20:58 , Processed in 0.032739 second(s), 11 queries , Redis On.

Powered by Discuz X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表