ASCII 与 Unicode:两种字符编码的定义和不同
文章目录
- 💯前言
- 💯一、ASCII编码详解
- 1.1 ASCII的组成
- 1.2 ASCII的局限性
- 💯二、Unicode编码详解
- 2.1 Unicode编码方式
- 2.2 Unicode的字符范围
- 💯三、ASCII与Unicode的主要区别
- 3.1 语言支持
- 3.2 存储和编码
- 💯四、C语言中的ASCII与Java中的Unicode
- 4.1 C语言中的字符表示
- 4.2 Java中的字符表示
- 💯总结
💯前言
- 在计算机科学和编程语言中,字符编码是非常重要的概念。它定义了计算机如何表示和存储文本信息。在不同的编程语言中,字符的表示方法可能有所不同。C语言使用ASCII编码表示字符,而Java则使用Unicode编码。这两者虽然都是字符编码,但它们有很大的不同,尤其是在字符集的范围、表示方法以及支持的语言字符种类等方面。
本文将详细解释ASCII和Unicode的定义、历史背景、两者之间的主要区别以及它们在C语言和Java中的应用。通过详细的分析和例子,我们将帮助读者更好地理解这两种编码标准,以及它们如何影响不同语言中的字符表示。
Java
💯一、ASCII编码详解
Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0x00 | NUL | 32 | 0x20 | (space) | 64 | 0x40 | @ | 96 | 0x60 | ` | 128 | 0x80 | Ç | 160 | 0xA0 | |
1 | 0x01 | SOH | 33 | 0x21 | ! | 65 | 0x41 | A | 97 | 0x61 | a | 129 | 0x81 | ü | 161 | 0xA1 | ¡ |
2 | 0x02 | STX | 34 | 0x22 | " | 66 | 0x42 | B | 98 | 0x62 | b | 130 | 0x82 | é | 162 | 0xA2 | ¢ |
3 | 0x03 | ETX | 35 | 0x23 | # | 67 | 0x43 | C | 99 | 0x63 | c | 131 | 0x83 | â | 163 | 0xA3 | £ |
4 | 0x04 | EOT | 36 | 0x24 | $ | 68 | 0x44 | D | 100 | 0x64 | d | 132 | 0x84 | ä | 164 | 0xA4 | ¤ |
5 | 0x05 | ENQ | 37 | 0x25 | % | 69 | 0x45 | E | 101 | 0x65 | e | 133 | 0x85 | å | 165 | 0xA5 | ¥ |
6 | 0x06 | ACK | 38 | 0x26 | & | 70 | 0x46 | F | 102 | 0x66 | f | 134 | 0x86 | æ | 166 | 0xA6 | ¦ |
7 | 0x07 | BEL | 39 | 0x27 | ’ | 71 | 0x47 | G | 103 | 0x67 | g | 135 | 0x87 | ô | 167 | 0xA7 | § |
8 | 0x08 | BS | 40 | 0x28 | ( | 72 | 0x48 | H | 104 | 0x68 | h | 136 | 0x88 | ö | 168 | 0xA8 | ¨ |
9 | 0x09 | TAB | 41 | 0x29 | ) | 73 | 0x49 | I | 105 | 0x69 | i | 137 | 0x89 | ù | 169 | 0xA9 | © |
10 | 0x0A | LF | 42 | 0x2A | * | 74 | 0x4A | J | 106 | 0x6A | j | 138 | 0x8A | ú | 170 | 0xAA | ® |
11 | 0x0B | VT | 43 | 0x2B | + | 75 | 0x4B | K | 107 | 0x6B | k | 139 | 0x8B | ñ | 171 | 0xAB | ¬ |
12 | 0x0C | FF | 44 | 0x2C | , | 76 | 0x4C | L | 108 | 0x6C | l | 140 | 0x8C | Ñ | 172 | 0xAC | |
13 | 0x0D | CR | 45 | 0x2D | - | 77 | 0x4D | M | 109 | 0x6D | m | 141 | 0x8D | Ô | 173 | 0xAD | |
14 | 0x0E | SO | 46 | 0x2E | . | 78 | 0x4E | N | 110 | 0x6E | n | 142 | 0x8E | Ö | 174 | 0xAE | ® |
15 | 0x0F | SI | 47 | 0x2F | / | 79 | 0x4F | O | 111 | 0x6F | o | 143 | 0x8F | × | 175 | 0xAF | ° |
16 | 0x10 | DLE | 48 | 0x30 | 0 | 80 | 0x50 | P | 112 | 0x70 | p | 144 | 0x90 | Ø | 176 | 0xB0 | ¨ |
17 | 0x11 | DC1 | 49 | 0x31 | 1 | 81 | 0x51 | Q | 113 | 0x71 | q | 145 | 0x91 | ø | 177 | 0xB1 | ± |
18 | 0x12 | DC2 | 50 | 0x32 | 2 | 82 | 0x52 | R | 114 | 0x72 | r | 146 | 0x92 | œ | 178 | 0xB2 | ² |
19 | 0x13 | DC3 | 51 | 0x33 | 3 | 83 | 0x53 | S | 115 | 0x73 | s | 147 | 0x93 | Œ | 179 | 0xB3 | ³ |
20 | 0x14 | DC4 | 52 | 0x34 | 4 | 84 | 0x54 | T | 116 | 0x74 | t | 148 | 0x94 | ª | 180 | 0xB4 | ´ |
21 | 0x15 | NAK | 53 | 0x35 | 5 | 85 | 0x55 | U | 117 | 0x75 | u | 149 | 0x95 | º | 181 | 0xB5 | µ |
22 | 0x16 | SYN | 54 | 0x36 | 6 | 86 | 0x56 | V | 118 | 0x76 | v | 150 | 0x96 | û | 182 | 0xB6 | ¶ |
23 | 0x17 | ETB | 55 | 0x37 | 7 | 87 | 0x57 | W | 119 | 0x77 | w | 151 | 0x97 | Ü | 183 | 0xB7 | · |
24 | 0x18 | CAN | 56 | 0x38 | 8 | 88 | 0x58 | X | 120 | 0x78 | x | 152 | 0x98 | ¯ | 184 | 0xB8 | ¨ |
25 | 0x19 | EM | 57 | 0x39 | 9 | 89 | 0x59 | Y | 121 | 0x79 | y | 153 | 0x99 | ˙ | 185 | 0xB9 | ¹ |
26 | 0x1A | SUB | 58 | 0x3A | : | 90 | 0x5A | Z | 122 | 0x7A | z | 154 | 0x9A | ∆ | 186 | 0xBA | º |
27 | 0x1B | ESC | 59 | 0x3B | ; | 91 | 0x5B | [ | 123 | 0x7B | { | 155 | 0x9B | ¯ | 187 | 0xBB | » |
28 | 0x1C | FS | 60 | 0x3C | < | 92 | 0x5C | \ | 124 | 0x7C | 156 | 0x9C | ∑ | 188 | 0xBC | ||
29 | 0x1D | GS | 61 | 0x3D | = | 93 | 0x5D | ] | 125 | 0x7D | } | 157 | 0x9D | ∏ | 189 | 0xBD | ½ |
30 | 0x1E | RS | 62 | 0x3E | > | 94 | 0x5E | ^ | 126 | 0x7E | ~ | 158 | 0x9E | π | 190 | 0xBE | ¾ |
31 | 0x1F | US | 63 | 0x3F | ? | 95 | 0x5F | _ | 127 | 0x7F | DEL | 159 | 0x9F |
ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种用于电子通信的字符编码标准,它为计算机系统和设备提供了一个统一的字符集。ASCII码最初由美国国家标准协会(ANSI)于1960年代制定,最初用于电传打字机。它是以7位二进制编码表示字符,其中包含了128个字符,包括英文字母、数字、标点符号以及一些控制字符(如回车、换行等)。
1.1 ASCII的组成
-
控制字符(0到31):这些字符通常不会在屏幕上显示出来,而是用于控制设备的行为。比如:
0
- Null字符:用于标记字符串的结束。7
- Bell:产生响铃声。10
- Line Feed(LF):换行符。13
- Carriage Return(CR):回车符。
-
可打印字符(32到126):这些字符可以直接显示出来,包括字母、数字、标点符号等。例如:
32
- 空格符48-57
- 数字字符(‘0’到’9’)65-90
- 大写字母(‘A’到’Z’)97-122
- 小写字母(‘a’到’z’)33
- 感叹号(!
)46
- 句点(.
)
1.2 ASCII的局限性
由于ASCII码仅使用7位编码,它的字符集仅能表示128个字符,主要包括英语字符和一些符号、控制字符。这意味着ASCII无法表示中文、日文、阿拉伯文等其他语言的字符,也无法表示诸如表情符号、数学符号等非英文字符。因此,随着全球化的需求,ASCII逐渐显示出其不足之处。
💯二、Unicode编码详解
此表列出了包括 ASCII 范围内以及 Unicode 的扩展字符(如拉丁字母扩展)的一些字符。Unicode 编码表的实际内容远比这更庞大,涵盖全球几乎所有语言和符号。
Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char | Dec | Hex | Char |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0x00 | NUL | 32 | 0x20 | (space) | 64 | 0x40 | @ | 96 | 0x60 | ` | 128 | 0x80 | Ç | 160 | 0xA0 | |
1 | 0x01 | SOH | 33 | 0x21 | ! | 65 | 0x41 | A | 97 | 0x61 | a | 129 | 0x81 | ü | 161 | 0xA1 | ¡ |
2 | 0x02 | STX | 34 | 0x22 | " | 66 | 0x42 | B | 98 | 0x62 | b | 130 | 0x82 | é | 162 | 0xA2 | ¢ |
3 | 0x03 | ETX | 35 | 0x23 | # | 67 | 0x43 | C | 99 | 0x63 | c | 131 | 0x83 | â | 163 | 0xA3 | £ |
4 | 0x04 | EOT | 36 | 0x24 | $ | 68 | 0x44 | D | 100 | 0x64 | d | 132 | 0x84 | ä | 164 | 0xA4 | ¤ |
5 | 0x05 | ENQ | 37 | 0x25 | % | 69 | 0x45 | E | 101 | 0x65 | e | 133 | 0x85 | å | 165 | 0xA5 | ¥ |
6 | 0x06 | ACK | 38 | 0x26 | & | 70 | 0x46 | F | 102 | 0x66 | f | 134 | 0x86 | æ | 166 | 0xA6 | ¦ |
7 | 0x07 | BEL | 39 | 0x27 | ’ | 71 | 0x47 | G | 103 | 0x67 | g | 135 | 0x87 | ô | 167 | 0xA7 | § |
8 | 0x08 | BS | 40 | 0x28 | ( | 72 | 0x48 | H | 104 | 0x68 | h | 136 | 0x88 | ö | 168 | 0xA8 | ¨ |
9 | 0x09 | TAB | 41 | 0x29 | ) | 73 | 0x49 | I | 105 | 0x69 | i | 137 | 0x89 | ù | 169 | 0xA9 | © |
10 | 0x0A | LF | 42 | 0x2A | * | 74 | 0x4A | J | 106 | 0x6A | j | 138 | 0x8A | ú | 170 | 0xAA | ® |
11 | 0x0B | VT | 43 | 0x2B | + | 75 | 0x4B | K | 107 | 0x6B | k | 139 | 0x8B | ñ | 171 | 0xAB | ¬ |
12 | 0x0C | FF | 44 | 0x2C | , | 76 | 0x4C | L | 108 | 0x6C | l | 140 | 0x8C | Ñ | 172 | 0xAC | |
13 | 0x0D | CR | 45 | 0x2D | - | 77 | 0x4D | M | 109 | 0x6D | m | 141 | 0x8D | Ô | 173 | 0xAD | |
14 | 0x0E | SO | 46 | 0x2E | . | 78 | 0x4E | N | 110 | 0x6E | n | 142 | 0x8E | Ö | 174 | 0xAE | ® |
15 | 0x0F | SI | 47 | 0x2F | / | 79 | 0x4F | O | 111 | 0x6F | o | 143 | 0x8F | × | 175 | 0xAF | ° |
16 | 0x10 | DLE | 48 | 0x30 | 0 | 80 | 0x50 | P | 112 | 0x70 | p | 144 | 0x90 | Ø | 176 | 0xB0 | ¨ |
17 | 0x11 | DC1 | 49 | 0x31 | 1 | 81 | 0x51 | Q | 113 | 0x71 | q | 145 | 0x91 | ø | 177 | 0xB1 | ± |
18 | 0x12 | DC2 | 50 | 0x32 | 2 | 82 | 0x52 | R | 114 | 0x72 | r | 146 | 0x92 | œ | 178 | 0xB2 | ² |
19 | 0x13 | DC3 | 51 | 0x33 | 3 | 83 | 0x53 | S | 115 | 0x73 | s | 147 | 0x93 | Œ | 179 | 0xB3 | ³ |
20 | 0x14 | DC4 | 52 | 0x34 | 4 | 84 | 0x54 | T | 116 | 0x74 | t | 148 | 0x94 | ª | 180 | 0xB4 | ´ |
21 | 0x15 | NAK | 53 | 0x35 | 5 | 85 | 0x55 | U | 117 | 0x75 | u | 149 | 0x95 | º | 181 | 0xB5 | µ |
22 | 0x16 | SYN | 54 | 0x36 | 6 | 86 | 0x56 | V | 118 | 0x76 | v | 150 | 0x96 | û | 182 | 0xB6 | ¶ |
23 | 0x17 | ETB | 55 | 0x37 | 7 | 87 | 0x57 | W | 119 | 0x77 | w | 151 | 0x97 | Ü | 183 | 0xB7 | · |
24 | 0x18 | CAN | 56 | 0x38 | 8 | 88 | 0x58 | X | 120 | 0x78 | x | 152 | 0x98 | ¯ | 184 | 0xB8 | ¨ |
25 | 0x19 | EM | 57 | 0x39 | 9 | 89 | 0x59 | Y | 121 | 0x79 | y | 153 | 0x99 | ˙ | 185 | 0xB9 | ¹ |
26 | 0x1A | SUB | 58 | 0x3A | : | 90 | 0x5A | Z | 122 | 0x7A | z | 154 | 0x9A | ∆ | 186 | 0xBA | º |
27 | 0x1B | ESC | 59 | 0x3B | ; | 91 | 0x5B | [ | 123 | 0x7B | { | 155 | 0x9B | ¯ | 187 | 0xBB | » |
28 | 0x1C | FS | 60 | 0x3C | < | 92 | 0x5C | \ | 124 | 0x7C | 156 | 0x9C | ∑ | 188 | 0xBC | ||
29 | 0x1D | GS | 61 | 0x3D | = | 93 | 0x5D | ] | 125 | 0x7D | } | 157 | 0x9D | ∏ | 189 | 0xBD | ½ |
30 | 0x1E | RS | 62 | 0x3E | > | 94 | 0x5E | ^ | 126 | 0x7E | ~ | 158 | 0x9E | π | 190 | 0xBE | ¾ |
31 | 0x1F | US | 63 | 0x3F | ? | 95 | 0x5F | _ | 127 | 0x7F | DEL | 159 | 0x9F |
Unicode是为了解决ASCII编码的局限性而设计的一种字符编码标准。Unicode的目标是能够表示全球所有语言的字符。与ASCII仅支持英语字符不同,Unicode支持几乎所有的语言字符、符号、数学符号、表情符号、历史文献字符等。
Unicode最初由Unicode联盟于1991年发布,采用16位或更高位数的编码,可以表示更多的字符。它为每个字符分配一个唯一的码点(code point),通常用“U+”加上一个十六进制数字来表示。例如,字符"A"的Unicode码点是U+0041。
2.1 Unicode编码方式
Unicode采用了不同的编码方式来表示字符,其中最常见的有三种:UTF-8、UTF-16和UTF-32。
- UTF-8:一种变长编码方式,使用1到4个字节来表示字符。UTF-8与ASCII兼容,对于ASCII字符(0-127),它只使用1个字节,而对于其他字符,UTF-8则使用2到4个字节。
- UTF-16:通常使用2个字节(16位)表示字符,对于一些不常见的字符使用代理对(surrogate pairs)来表示。
- UTF-32:每个字符都使用4个字节(32位)表示,适用于内部处理,但存储效率较低。
2.2 Unicode的字符范围
Unicode字符集的范围非常广泛。当前版本的Unicode可以表示超过100万个字符,但实际上使用的字符还远远没有达到这个数量。Unicode字符集将字符划分为多个块,每个块包含了与特定语言、符号或用途相关的字符。例如:
- 基本拉丁字母:U+0000到U+007F(包括ASCII字符)
- 拉丁扩展-A:U+0080到U+00FF
- 汉字(CJK):U+4E00到U+9FFF
- 表情符号:U+1F600到U+1F64F
- 数学符号:U+2200到U+22FF
💯三、ASCII与Unicode的主要区别
ASCII 表(美国标准信息交换码)只有 128 个字符(从 0 到 127),其中包含了控制字符、数字、字母和常见符号。
而 Unicode 表 是一个更广泛的字符编码标准,旨在涵盖所有书写系统、符号和字符。Unicode 不仅包括 ASCII 中的字符,还包括许多其他符号、字母、汉字等字符。Unicode 是兼容 ASCII 的,在 Unicode 中,前 128 个字符与 ASCII 是相同的,但其余的字符与 ASCII 完全不同。
因此,ASCII 是 Unicode 的一个子集,但 Unicode 远比 ASCII 大得多,涵盖了更多字符。
特性 | ASCII | Unicode |
---|---|---|
编码位数 | 7位(标准ASCII为7位,扩展ASCII为8位) | 16位、32位或更大的编码(支持变长) |
字符范围 | 128个字符(0-127) | 可表示超过百万个字符 |
支持语言 | 仅支持英语字符,无法处理其他语言 | 支持全球多种语言(如中文、日文、韩文等) |
存储效率 | 使用1个字节 | 根据编码方式不同,存储效率不一(UTF-8变长,UTF-16和UTF-32较大) |
兼容性 | 不支持其他语言字符 | 完全支持ASCII,并能够兼容各种语言和符号 |
3.1 语言支持
-
ASCII:由于ASCII字符集仅包含128个字符,主要涵盖了英语字母、数字、常用符号和控制字符,因此它只能用于英文环境。对于其他语言(如中文、日文等),无法直接表示。
-
Unicode:Unicode支持全球几乎所有的语言字符,包括中文、日文、韩文、阿拉伯文等,甚至包括表情符号、数学符号、古代文字等。Unicode的广泛支持使其成为全球范围内的标准字符编码。
3.2 存储和编码
-
ASCII:每个字符仅占用1个字节(8位),因此在表示简单字符时,它的存储空间非常高效。
-
Unicode:由于Unicode字符集非常庞大,编码方式也相应多样化。UTF-8是变长编码,它会根据字符的需求使用1到4个字节,而UTF-16通常使用2个字节,UTF-32使用4个字节来表示一个字符。
💯四、C语言中的ASCII与Java中的Unicode
4.1 C语言中的字符表示
在C语言中,字符通常通过char
类型表示,该类型默认使用ASCII编码。C语言的char
类型通常占用1个字节,因此它只能表示ASCII字符集中的128个字符。如果要表示非ASCII字符,通常需要使用扩展的字符编码方案,例如UTF-8或UTF-16。
4.2 Java中的字符表示
Java中的字符使用char
类型表示,而char
类型是基于UTF-16编码的。Java中的char
占用2个字节(16位),因此它可以表示常用的字符,包括ASCII字符、拉丁字母、中文字符等。对于Unicode的超出基本多语言平面的字符,Java通过代理对(surrogate pairs)机制来表示。
💯总结
- ASCII编码适用于英文字符和一些符号,局限性较大,只能表示128个字符,适用于早期的计算机系统和简单的字符表示。
- Unicode提供了全球化的字符支持,能够表示所有已知语言的字符、符号和表情符号,支持不同的编码方式如UTF-8、UTF-16、UTF-32,适用于现代的跨平台编程环境。
- C语言使用ASCII编码表示字符,主要局限于英文字符,若要处理其他语言字符需要借助扩展编码;而Java使用Unicode(UTF-16)编码,可以直接支持多语言字符,具有更强的跨语言支持能力。
通过理解ASCII和Unicode的差异及其在不同编程语言中的应用,我们可以更好地应对在全球化、多语言应用环境中的字符处理问题。
相关文章:

ASCII 与 Unicode:两种字符编码的定义和不同
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: Java 文章目录 💯前言💯一、ASCII编码详解1.1 ASCII的组成1.2 ASCII的局限性 💯二、Unicode编码详解2.1 Unicode编码方式2.2 Unicode的字符范围 💯三、ASCII与Unicode的…...

Linux相关概念和易错知识点(28)(线程控制、Linux下线程的底层)
目录 1.线程控制 (1)pthread和thread库 (2)线程的创建、等待和分离 ①线程创建 ②线程等待 ③线程分离 ④线程替换(不可行) (3)线程的终止和取消 ①线程终止 ②线程取消 2…...
lighten() 函数被弃用:替代方案color.scale()或者color.adjust()
在 SCSS (Sass 的一个语法) 中,lighten() 函数用于调整颜色的亮度。然而,随着 Sass 语言的不断发展,一些旧函数被标记为弃用,以鼓励使用更现代、更灵活的 API。lighten() 函数就是其中之一。 1. 弃用通知 当您看到 lighten() is…...

【leetcode】双指针:有效三角形的个数 and 和为s的两个数
文章目录 1. 有效三角形的个数1.题目2.讲解算法原理3.代码 2.和为s的两个数1.题目2.思路3.代码 1. 有效三角形的个数 1.题目 示例1解析: 2.讲解算法原理 3.代码 class Solution { public:int triangleNumber(vector<int>& nums) {sort(nums.begin(), …...

IDEA通过Contince接入Deepseek
Deepseek 的出色表现,上期【Deepseek得两种访问方式与本地部署】 安装Continue插件 第一步、下载插件 在编辑栏【File】->设置【Settiings】或快捷键【CtrlAltS】,弹窗的左侧导航树,选择【plugins】,在marketplace 搜索【Continue】,点…...
grep如何排除多个目录?
在使用 grep 进行文本搜索时,有时候需要排除多个目录,避免在这些目录下进行搜索。下面介绍几种不同的实现方式。 目录 1.使用 -r 和 --exclude-dir 选项(GNU grep) 2.使用扩展正则表达式和 -P 选项(GNU grep&#x…...
Elasticsearch 数据建模:从原理到实战的降维打击指南
Elasticsearch 数据建模:从原理到实战的降维打击指南 🚀 第一章 数据建模的物理法则:倒排索引的奇妙世界 1.1 倒排索引:比字典更聪明的数据结构 当你在ES中存入"Hello World"时,背后发生了这些魔法&#…...
python defaultdict用法
摘要 使用 defaultdict 可以简化处理字典中缺失键的情况。以下是几个使用 defaultdict 的示例,展示了它在不同场景下的应用。 示例 1:分组文件 假设我们有一组文件名,想要根据文件扩展名将它们分组。我们可以使用 defaultdict 来实现这一点…...
Java 与设计模式(15):模板方法模式
一、定义 模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架(也就是大致的步骤和流程),而将一些具体步骤的实现延迟到子类中。这样,子类可以不改变算法的结构即可重新定义算法的某些特定步骤。 二、Ja…...
ubuntu更新失败:apt-get install -f Transaction failed: 软件包系统已损坏
检查您是否使用了第三方源。如果是就禁用它们,它们常常导致问题。 然后在终端中运行以下命令:apt-get install -f Transaction failed: 软件包系统已损坏下列软件包未满足的依赖关系:sunloginclient: Depends: libappindicator3-1 但是 %%s 没…...
16-使用QtChart创建动态图表:入门指南
QtChart是Qt框架中的一个强大模块,用于创建各种类型的图表,如折线图、柱状图、饼图等。它提供了丰富的API和灵活的配置选项,使得开发者能够轻松地将数据可视化集成到应用程序中。本文将介绍如何使用QtChart创建一个简单的动态折线图ÿ…...
C++ | 虚函数
在 C 面向对象编程领域,多态性堪称核心概念,而虚函数则是实现运行时多态的关键所在。 一、虚函数的概念与作用 1.1 什么是虚函数 虚函数是 C 中用于实现动态多态的成员函数。在基类中使用virtual关键字声明虚函数后,派生类能够重写&#x…...
单元测试整理
在国外软件开发中,单元测试必不可少,但是国内并不太重视这一块,一个好的单元测试可以提前发现很多问题,也减去和测试battle的时间 Spring单元测试 JUnit4 RunWith 指明单元测试框架 e.g. RunWith(SpringJUnit4ClassRunner.cla…...
Delphi语言的软件工程
Delphi语言的软件工程 引言 在软件工程的历史长河中,Delphi语言作为一种快速应用程序开发(RAD)的工具,凭借其高效的开发环境和强大的编程能力,一直在软件开发领域占有一席之地。本文将探讨Delphi语言的历史背景、特性…...
XSS攻击(跨站脚本攻击)详解与实战
文章目录 一、什么是XSS?二、XSS分类与场景三、XSS攻击实战流程四、CTF中的XSS利用五、XSS防御方案六、绕过过滤的常见技巧七、实战练习资源 一、什么是XSS? XSS(Cross-Site Scripting) 是一种通过向网页注入恶意脚本(…...

【C++指南】类和对象(十):const成员函数
💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《C指南》 期待您的关注 目录 引言 一、const成员函数的定义与语法 1. 基本语法 2. 底层原理 二、const成员函数的作用与约束…...
数值分析与科学计算导引——误差与算法举例
文章目录 第一章 数值分析与科学计算导引1.1 数值分析的对象、作用与特点数值分析的对象数值分析的作用数值分析的特点 1.2 数值计算的误差误差分类误差与有效数字数值运算的误差估计 1.3 算法举例秦九韶算法求多项式值开根号迭代算法牛顿切线加权平均的松弛技术 第一章 数值分…...
ubuntu安装docker 无法拉取问题
sudo docker run hello-world [sudo] ubuntu 的密码: Unable to find image hello-world:latest locally docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded (Client.Timeout exceeded while awai…...

【C++项目】Rpc通信框架设计
目录 Rpc远程调用的思想 项目框架设计 服务端模块划分 网络通信模块 Network 应用层通信协议模块 Protocol 消息分发处理模块 Dispatcher 远程调用路由功能模块 RpcRouter 编辑 发布订阅功能模块 Publish-Subscribe 服务注册/发现/上线/下线功能模块 Registry-Disc…...
八股取士--dockerk8s
一、Docker 基础 Docker 和虚拟机的区别是什么? 答案: 虚拟机(VM):虚拟化硬件,每个 VM 有独立操作系统,资源占用高,启动慢。Docker:容器化应用,共享宿主机内核…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化
一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一,是基于哈希表的Map接口非同步实现。它允许使用null键和null值(但只能有一个null键),并且不保证映射顺序的恒久不变。与Hashtable相比,Hash…...