当前位置: 首页 > 编程日记 > 正文

VC++关于UNICODE版本的开发

关于UNICODE版本的开发

  1. 代码转换方案

    1. 概述

在VC6.0中,相应的有一些宏来代替ANSI的函数、宏或数据类型,这些宏在ANSI编译条件中处理字符串为单字节,而在UNICODE中处理字符串为双字节,请在编写程序中请使用这些宏。

  1. 数据类型

表-1.1中黑体字部分为替代数据类型的宏

Generic-Text Data Type Mappings

Generic-Text Data Type Name

SBCS (_UNICODE, _MBCS Not Defined)


_MBCS Defined


_UNICODE Defined

_TCHAR

Char

char

wchar_t

_TINT

Int

int

wint_t

_TSCHAR

signed char

signed char

wchar_t

_TUCHAR

unsigned char

unsigned char

wchar_t

_TXCHAR

Char

unsigned char

wchar_t

_T or _TEXT

No effect (removed by preprocessor)

No effect (removed by preprocessor)

L (converts following character or string to its Unicode counterpart)

表-1.1

  1. 函数

表-1.2中黑体字部分为替代函数的宏

Generic-Text Routine Mappings

Generic-Text
Routine Name

SBCS (_UNICODE &
MBCS Not Defined)


_MBCS Defined


_UNICODE Defined

_fgettc

fgetc

fgetc

fgetwc

_fgettchar

fgetchar

fgetchar

_fgetwchar

_fgetts

fgets

fgets

fgetws

_fputtc

fputc

fputc

fputwc

_fputtchar

fputchar

fputchar

_fputwchar

_fputts

fputs

fputs

fputws

_ftprintf

fprintf

fprintf

fwprintf

_ftscanf

fscanf

fscanf

fwscanf

_gettc

getc

getc

getwc

_gettchar

getchar

getchar

getwchar

_getts

gets

gets

getws

_istalnum

isalnum

_ismbcalnum

iswalnum

_istalpha

isalpha

_ismbcalpha

iswalpha

_istascii

__isascii

__isascii

iswascii

_istcntrl

iscntrl

iscntrl

iswcntrl

_istdigit

isdigit

_ismbcdigit

iswdigit

_istgraph

isgraph

_ismbcgraph

iswgraph

_istlead

Always returns false

_ismbblead

Always returns false

_istleadbyte

Always returns false

isleadbyte

Always returns false

_istlegal

Always returns true

_ismbclegal

Always returns true

_istlower

islower

_ismbclower

iswlower

_istprint

isprint

_ismbcprint

iswprint

_istpunct

ispunct

_ismbcpunct

iswpunct

_istspace

isspace

_ismbcspace

iswspace

_istupper

isupper

_ismbcupper

iswupper

_istxdigit

isxdigit

isxdigit

iswxdigit

_itot

_itoa

_itoa

_itow

_ltot

_ltoa

_ltoa

_ltow

_puttc

putc

putc

putwc

_puttchar

putchar

putchar

putwchar

_putts

puts

puts

putws

_tmain

main

main

wmain

_sntprintf

_snprintf

_snprintf

_snwprintf

_stprintf

sprintf

sprintf

swprintf

_stscanf

sscanf

sscanf

swscanf

_taccess

_access

_access

_waccess

_tasctime

asctime

asctime

_wasctime

_tccpy

Maps to macro or inline function

_mbccpy

Maps to macro or inline function

_tchdir

_chdir

_chdir

_wchdir

_tclen

Maps to macro or inline function

_mbclen

Maps to macro or inline function

_tchmod

_chmod

_chmod

_wchmod

_tcreat

_creat

_creat

_wcreat

_tcscat

strcat

_mbscat

wcscat

_tcschr

strchr

_mbschr

wcschr

_tcsclen

strlen

_mbslen

wcslen

_tcscmp

strcmp

_mbscmp

wcscmp

_tcscoll

strcoll

_mbscoll

wcscoll

_tcscpy

strcpy

_mbscpy

wcscpy

_tcscspn

strcspn

_mbscspn

wcscspn

_tcsdec

_strdec

_mbsdec

_wcsdec

_tcsdup

_strdup

_mbsdup

_wcsdup

_tcsftime

strftime

strftime

wcsftime

_tcsicmp

_stricmp

_mbsicmp

_wcsicmp

_tcsicoll

_stricoll

_stricoll

_wcsicoll

_tcsinc

_strinc

_mbsinc

_wcsinc

_tcslen

strlen

strlen

wcslen

_tcslwr

_strlwr

_mbslwr

_wcslwr

_tcsnbcnt

_strncnt

_mbsnbcnt

_wcnscnt

_tcsncat

strncat

_mbsnbcat

wcsncat

_tcsnccat

strncat

_mbsncat

wcsncat

_tcsncmp

strncmp

_mbsnbcmp

wcsncmp

_tcsnccmp

strncmp

_mbsncmp

wcsncmp

_tcsnccnt

_strncnt

_mbsnccnt

_wcsncnt

_tcsnccpy

strncpy

_mbsncpy

wcsncpy

_tcsncicmp

_strnicmp

_mbsnicmp

_wcsnicmp

_tcsncpy

strncpy

_mbsnbcpy

wcsncpy

_tcsncset

_strnset

_mbsnset

_wcsnset

_tcsnextc

_strnextc

_mbsnextc

_wcsnextc

_tcsnicmp

_strnicmp

_mbsnicmp

_wcsnicmp

_tcsnicoll

_strnicoll

_strnicoll

_wcsnicoll

_tcsninc

_strninc

_mbsninc

_wcsninc

_tcsnccnt

_strncnt

_mbsnccnt

_wcsncnt

_tcsnset

_strnset

_mbsnbset

_wcsnset

_tcspbrk

strpbrk

_mbspbrk

wcspbrk

_tcsspnp

_strspnp

_mbsspnp

_wcsspnp

_tcsrchr

strrchr

_mbsrchr

wcsrchr

_tcsrev

_strrev

_mbsrev

_wcsrev

_tcsset

_strset

_mbsset

_wcsset

_tcsspn

strspn

_mbsspn

wcsspn

_tcsstr

strstr

_mbsstr

wcsstr

_tcstod

strtod

strtod

wcstod

_tcstok

strtok

_mbstok

wcstok

_tcstol

strtol

strtol

wcstol

_tcstoul

strtoul

strtoul

wcstoul

_tcsupr

_strupr

_mbsupr

_wcsupr

_tcsxfrm

strxfrm

strxfrm

wcsxfrm

_tctime

ctime

ctime

_wctime

_texecl

_execl

_execl

_wexecl

_texecle

_execle

_execle

_wexecle

_texeclp

_execlp

_execlp

_wexeclp

_texeclpe

_execlpe

_execlpe

_wexeclpe

_texecv

_execv

_execv

_wexecv

_texecve

_execve

_execve

_wexecve

_texecvp

_execvp

_execvp

_wexecvp

_texecvpe

_execvpe

_execvpe

_wexecvpe

_tfdopen

_fdopen

_fdopen

_wfdopen

_tfindfirst

_findfirst

_findfirst

_wfindfirst

_tfindnext

_findnext

_findnext

_wfindnext

_tfopen

fopen

fopen

_wfopen

_tfreopen

freopen

freopen

_wfreopen

_tfsopen

_fsopen

_fsopen

_wfsopen

_tfullpath

_fullpath

_fullpath

_wfullpath

_tgetcwd

_getcwd

_getcwd

_wgetcwd

_tgetenv

getenv

getenv

_wgetenv

_tmain

main

main

wmain

_tmakepath

_makepath

_makepath

_wmakepath

_tmkdir

_mkdir

_mkdir

_wmkdir

_tmktemp

_mktemp

_mktemp

_wmktemp

_tperror

perror

perror

_wperror

_topen

_open

_open

_wopen

_totlower

tolower

_mbctolower

towlower

_totupper

toupper

_mbctoupper

towupper

_tpopen

_popen

_popen

_wpopen

_tprintf

printf

printf

wprintf

_tremove

remove

remove

_wremove

_trename

rename

rename

_wrename

_trmdir

_rmdir

_rmdir

_wrmdir

_tsearchenv

_searchenv

_searchenv

_wsearchenv

_tscanf

scanf

scanf

wscanf

_tsetlocale

setlocale

setlocale

_wsetlocale

_tsopen

_sopen

_sopen

_wsopen

_tspawnl

_spawnl

_spawnl

_wspawnl

_tspawnle

_spawnle

_spawnle

_wspawnle

_tspawnlp

_spawnlp

_spawnlp

_wspawnlp

_tspawnlpe

_spawnlpe

_spawnlpe

_wspawnlpe

_tspawnv

_spawnv

_spawnv

_wspawnv

_tspawnve

_spawnve

_spawnve

_wspawnve

_tspawnvp

_spawnvp

_spawnvp

_tspawnvp

_tspawnvpe

_spawnvpe

_spawnvpe

_tspawnvpe

_tsplitpath

_splitpath

_splitpath

_wsplitpath

_tstat

_stat

_stat

_wstat

_tstrdate

_strdate

_strdate

_wstrdate

_tstrtime

_strtime

_strtime

_wstrtime

_tsystem

system

system

_wsystem

_ttempnam

_tempnam

_tempnam

_wtempnam

_ttmpnam

tmpnam

tmpnam

_wtmpnam

_ttoi

atoi

atoi

_wtoi

_ttol

atol

atol

_wtol

_tutime

_utime

_utime

_wutime

_tWinMain

WinMain

WinMain

wWinMain

_ultot

_ultoa

_ultoa

_ultow

_ungettc

ungetc

ungetc

ungetwc

_vftprintf

vfprintf

vfprintf

vfwprintf

_vsntprintf

_vsnprintf

_vsnprintf

_vsnwprintf

_vstprintf

vsprintf

vsprintf

vswprintf

_vtprintf

vprintf

vprintf

vwprintf

表1.2

表1.4中黑体字部分为替代宏的宏

Generic-Text Marco Mappings

Generic-Text –
Object Name

SBCS (_UNICODE,
_MBCS Not Defined)

_MBCS Defined

_UNICODE
Defined

LPCTSTR

LPCSTR(CONST CHAR*)

LPCSTR(CONST CHAR*)

CONST WCHAR*(const unsigned short*)

LPTSTR

LPSTR(CHAR*)

LPSTR(CHAR*)

WCHAR*(unsigned short*)

表1.3

  1. 常量和全局变量

表1.4中黑体字部分为替代常量和全局变量的宏

Generic-Text Constant and Global Variable Mappings

Generic-Text –
Object Name

SBCS (_UNICODE,
_MBCS Not Defined)

_MBCS Defined

_UNICODE
Defined

_TEOF

EOF

EOF

WEOF

_tenviron

_environ

_environ

_wenviron

_tfinddata_t

_finddata_t

_finddata_t

_wfinddata_t

表-1.4

  1. 不能转换的函数

atof替换方案

创建函数atof

#ifdef _UNICODE

double my_atof( LPCTSTR string )

{

assert( string!= NULL );

//double f3;

//_stscanf(string, _T("%lf"), &f3) ;//double

float f;

_stscanf(string, _T("%f"), &f) ;//float

return f;

}

#else

double my_atof( LPCTSTR string )

{

assert( string != NULL );

return atof(string);

}

#endif

fcvt替换方案

创建函数my_fcvt,如下:(注:FLT_EPSILON在float.h中)

#ifdef _UNICODE

LPCTSTR my_fcvt( double value, int count, int *dec, int *sign )

{

    static TCHAR szValue[32];

    

    if ( value < FLT_EPSILON && value > -FLT_EPSILON )

    {

        *dec = 0;

        *sign = 0;

        _stprintf(szValue, _T("%0*d"), count, 0);

        return (LPTSTR)&szValue;

    }

    if( value > FLT_EPSILON )

        *sign = 0;

    else

    {

        *sign = 1;

        value = -value;

    }

    *dec = 0;

    

    int nSize = _stprintf(szValue, _T("%.*f"), count, value);

    if( nSize > 0 )

    {

        //remove "."

        LPTSTR pstrSource = szValue;

        LPTSTR pstrDest = szValue;

        LPTSTR pstrEnd = szValue + nSize;

        LPTSTR pstrPoint = szValue;

        

        while (pstrSource < pstrEnd)

        {

            if (*pstrSource != '.')

            {

                *pstrDest = *pstrSource;

                pstrDest = _tcsinc(pstrDest);

            }

            else

            {

                pstrPoint = pstrDest;

            }

            pstrSource = _tcsinc(pstrSource);

        }

        *pstrDest = '\0';

        

        //trim "0"

        pstrDest = szValue;

        while (*pstrDest != '\0')

        {

            if (_tcschr(_T("0"), *pstrDest) == NULL)

                break;

            pstrDest = _tcsinc(pstrDest);

        }

        if (pstrDest != szValue)

        {

            int nDataLength = _tcslen(szValue) - (pstrDest - szValue);

            memmove(szValue, pstrDest, (nDataLength+1)*sizeof(TCHAR));

        }

        *dec = pstrPoint - pstrDest;

    }

    return (LPCTSTR)&szValue;

}

#else

inline LPCTSTR my_fcvt( double value, int count, int *dec, int *sign )

{

    return _fcvt( value, count, dec, sign );

}

#endif

  1. UNICODE文本文件的读写

对于UNICODE的文本文件,实际上就是双字节的二进制文件,该文件包含两个字节的文件头,内容是byte-order mark (BOM)值是0xfffe或0xfeff,表示字节的顺序,在这里使用的是0xfffe。

下面是一个写、读文件的例程:

#ifdef UNICODE

FILE* fp;

fp = _tfopen(_T("c:\\1.txt"), _T("w+b"));

if( fp != NULL )

{

LPCTSTR buf = _T("abc\r\n");

const BYTE head[] = {0xff, 0xfe};//BOM(byte-order mark)

fwrite(head, sizeof(BYTE), sizeof(head)/sizeof(BYTE), fp);

fwrite(buf, sizeof(TCHAR), _tcslen(buf), fp);

fclose(fp);

}

#endif

fp = _tfopen(_T("c:\\1.txt"), _T("r+t"));

#ifdef UNICODE

if( fp != NULL )

{

TCHAR text[512];

memset(text, 0, sizeof(text));

fread(text, sizeof(TCHAR), sizeof(text)-1, fp);

int ret;

IsTextUnicode(text, _tcslen(text), &ret);

LPTSTR pBuf = text;

if( ret & IS_TEXT_UNICODE_SIGNATURE )

{

pBuf ++;//文本的内容

}

fclose(fp);

}

#endif

  1. 工程转换方案

如果VC6.0工程选择的是中文,在菜单Projects->Setting的C/C++属性页中,把Preprocessor definitinons: _MBCS改为_UNICODE,如果是英文的工程则直接加入_UNICODE。

如果工程是EXE文件,则须在Link属性页中,选择Category为Output,把Entry-point symbol:设置为wWinMainCRTStartup,如果工程不是EXE文件,则不需要改变。

最后点击OK即可。

  1. 附:ANSI、DBCS 和 Unicode 的定义

Unicode 是一种用两个字节表示一个字符的字符集。另外一些程序,如 Windows 95 API,使用 ANSI (American National Standards Institute) 或 DBCS 存储和操作字符串。

  1. ANSI

ANSI 是个人计算机使用得最普遍的字符集。由于 ANSI 标准使用单一字节表示每个字符,因此最多只能有 256 个字符和标点符号代码。虽然对英语来说已经足够了,但不能完全支持其它语言。

  1. DBCS

发行在亚洲大部分地区的 Microsoft Windows 系统使用 DBCS。它支持很多不同的东亚语言字母,如汉语、日语和朝鲜语。DBCS 使用数字 0–128 表示 ASCII 字符集。其它大于 128 的数字作为前导字节字符,它并不是真正的字符,只是简单的表明下一个字符属于非拉丁字符集。在 DBCS 中,ASCII 字符的长度是一个字节,而日语、朝鲜语和其它东亚字符的长度是 2 个字节。

  1. Unicode

Unicode 是用两个字节表示每个字符的字符编码方案。国际标准组织 (ISO) 几乎为每种语言的每个字符和符号在 0 到 65,535 (216 – 1) 范围内定义了一个数字(再加上为将来发展保留的一些空余空间)。在所有 32 位版本的 Windows 中,部件对象模型 (COM) 都使用 Unicode,它是 OLE 和 ActiveX 技术的基础。Windows NT 全部支持 Unicode。虽然 Unicode 和 DBCS 都是双字节字符,但它们的编码方案完全不同。

转载于:https://www.cnblogs.com/MakeView660/p/9699036.html

相关文章:

计算机基础办公软件应用技能,计算机一级计算机基础及 ms office 应用考些什么...

一、计基础知识1.计算机的发展、其应用领域。2.计算机中数据的表示、存储与处理。3.多媒体技术的概念与应用。4.计算机病毒的概念、特征、分类与防治。5.计算机网络的概念、组成和分类;计算机与网络信息安全的概念和防控。6.因特网网络服务的概念、原理和应用。二、操作系统的功…

ffmpeg 编译Android

环境 macOS 10.15.4 NDK 21.3.6528147 ffmpeg 4.2.3 1.执行sudo xcodebuild -license&#xff0c;防止编译的时候找不到一些文件报错 2.下载ffmpeg(4.2.3),解压后进入主目录&#xff0c;修改configure文件&#xff0c;找到 SLIBNAME_WITH_MAJOR$(SLIBNAME).$(LIBMAJOR) LI…

Python基础14-迭代器与生成器

目录 迭代器 官方文档对迭代器的解释 迭代器协议 基于迭代器协议的统一的for循环机制 生成器 官方文档对生成器的解释 生成器函数 生成器表达式 生成器用法举例 利用生成器用单线程实现生产者消费者问题模型 生成器只能遍历一次 迭代器 官方文档对迭代器的解释 Thi…

Android学习笔记进阶九之Matrix对称变换

网上很多的倒影特效实际上就是一个对称变换&#xff0c;在改变透明度即可。 Matrix对称变换包括很多种&#xff0c;有关于Y轴对称&#xff0c;关于X轴对称&#xff0c;关于y -x对称等等。 1 关于Y轴对称 [java] view plaincopy// 获取资源文件的引用res Resources res…

《计算机网络应用基础》模拟试卷(六),《计算机与网络应用基础知识1》模拟试卷...

《计算机与网络应用基础知识1》模拟试卷 (4页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分《计算机与网络应用基础知识1》模拟试卷 一考生注意&#xff1a;1&#xff0e;本试卷共五道大题&…

ios架构篇-1 项目组织架构

关键字:项目组织架构 CocoaPod + 多项目级联 + xib + MVVM ProjectApp 项目app project Vendor 第三方.a、.framework库或源码 Resources 项目静态配置文件 Database 数据库文件夹,如CoreData Component 此项目特定的组件 Base 此项目…

Error 0162 - Setup data integrity check failure after updating BIOS via Thinkvantage

Start the computer and start pressing F1 and get into set up. In setup press F9 for default settings and press F10 for svae and exit. Problem solved. 转载于:https://www.cnblogs.com/gaoshaonian/p/9700130.html

CV00-02-CV基本操作1

目录 数字图像属性 opencv-python环境搭建 基本操作I Read in / Show out&#xff0c;读取、显示图像&#xff1b; Change color&#xff0c;修改颜色&#xff1b; Gamma Correction&#xff0c;伽马校正&#xff1b; Crop&#xff0c;切割&#xff1b; Histogram&…

链式表的按序号查找

本题要求实现一个函数&#xff0c;找到并返回链式表的第K个元素。 函数接口定义&#xff1a; ElementType FindKth( List L, int K );其中List结构定义如下&#xff1a; typedef struct LNode *PtrToLNode; struct LNode {ElementType Data;PtrToLNode Next; }; typedef PtrToL…

Codeforces Round #409 (Div. 2) C Voltage Keepsake(二分)

题意&#xff1a;有n(n<100000)个机器。。。第i个机器最开始有bi(1<bi < 100000)个单位的电量&#xff0c;机器可以储存的电量没有上限&#xff0c;启动后每秒消耗ai(1<ai<100000)个单位的电量,有一个充电器每秒可以充p(1<p<1e9)的电量。求保持所有机器电…

电子计算机的发展与应用教案,川教版信息技术七上第3课《电子计算机的发展与应用》教案1.doc...

川教版信息技术七上第3课《电子计算机的发展与应用》教案1整理双流县中学现代课堂教学分课时教学设计课题第3课 计算机的发展与应用课时1课型新课教学目标知识与能力&#xff1a;了解计算机的产生和发展&#xff0c;了解我国计算机的发展状况&#xff0c;计算机的特点与具体应用…

ios架构篇-2 国际化多语言

关键字:ios,国际化,多语言 实现功能: 1.默认采用系统语言 2.语言切换后实时生效 3.支持中英文,包含页面、app名称、系统默认权限弹框(如相机相册权限) 思路:app首次初始设置为系统语言,用户在app内切换语言时发送语言切换通知,刷新所有页面 1.project增加需要支持的…

Python基础15-函数闭包与装饰器

目录 装饰器概念 装饰器的实现 修改被装饰函数的代码&#xff08;非装饰器实现&#xff09; 修改被装饰函数的调用方式&#xff08;非装饰器实现&#xff09; 装饰器的实现&#xff08;不完整的实现level1&#xff09; 装饰器实现的语法糖&#xff08;不完整的实现level2…

python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)...

先下载github代码&#xff0c;下面的操作&#xff0c;都是基于这个版本来的&#xff01; https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意&#xff1a;由于涉及到版权问题&#xff0c;此附件没有图片和音乐。请参考链接&#xff0c;手动采集一下&#xff…

iOS技术篇1-CocoaPods

iOS技术篇1-CocoaPods 上一篇: 目录 下一篇&#xff1a;ios技术篇2-CoreData

计算机艺术未来发展趋势,计算机技术对现代艺术设计的影响

摘 要 在当今&#xff0c;计算机技术已经覆盖到了全球生活的各个领域&#xff0c;毫不夸张地说&#xff0c;计算机技术已经成为世界上最重要的技术之一。计算机技术对于某些行业和领域的冲击是巨大的&#xff0c;甚至是革命性的改变&#xff0c;它能够使很多的活动变得更为便捷…

【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

题面 在Byteland 一共有n 座城市&#xff0c;编号依次为1 到n&#xff0c;这些城市之间通过m 条单向公路连接。 对于两座不同的城市a 和b&#xff0c;如果a 能通过这些单向道路直接或间接到达b&#xff0c;且b 也能如此到达a&#xff0c;那么它们就会被认为是一对友好城市。 By…

Python基础16-模块与包基础01

目录 初识模块和包 Python常用的内置模块 关键字import和from import、from查找的路径 如何调用 __name__与模块执行 __name__的用法&#xff08;单元测试&#xff09; 初识模块和包 我们把功能相近或相关的py文件组成模块&#xff0c;这样分开写代码便于维护&#xff0c…

配置用户通过Telnet登录设备的身份认证(AAA本地认证)

背景信息 用户通过Telnet登录设备时&#xff0c;设备上必须配置验证方式&#xff0c;否则用户无法成功登录设备。设备支持不认证、密码认证和AAA认证三种用户界面的验证方式&#xff0c;其中AAA认证方式安全性最高。 采用AAA本地认证方式实现用户通过Telnet登录设备的身份认证&…

【自考】信息系统开发与管理(二)——章节详读

自考的第二阶段结束了&#xff0c;这一阶段是对书的详读过程。每章节读完&#xff0c;画一个导图。将其总结成一张网。织网的过程就是思考的过程。织网不断进行中……&#xff01;宏观方面&#xff1a;&#xff11;&#xff5e;&#xff13;章第一章 管理信息系统导论在研究一…

ios技术篇-CoreData

ios技术篇-CoreData 上一篇: iOS技术篇-CocoaPods 目录 下一篇&#xff1a;

中山大学计算机学院运动会,喜讯!我院获2019中大校运会教工组团体第二名

11月2日&#xff0c;中山大学2019年运动会在南校园举行&#xff0c;来自全校68个院系、附属医院、部门共3200余名师生参加比赛。由37名职工运动员组成的中山七院代表队参加教工组田径赛、趣味田径及球类等全部15项比赛&#xff0c;经过激烈角逐&#xff0c;最终以团体总分173分…

Python基础17-模块与包基础02、常用模块之time、random

目录 名字冲突与避免 设置BASE_DIR保证程序能找到模块位置 time random 名字冲突与避免 在test.py里写下面一段代码&#xff0c;用正则表达式包re进行匹配&#xff0c;匹配出123开头的字符。如果我们在test.py同级写一个re.py&#xff0c;那么Python解释器在进行导入时就会…

Hadoop学习笔记(1) ——菜鸟入门

&#xfeff;&#xfeff;Hadoop学习笔记(1) ——菜鸟入门 Hadoop是什么&#xff1f;先问一下百度吧&#xff1a; 【百度百科】一个分布式系统基础架构&#xff0c;由Apache基金会所开发。用户能够在不了解分布式底层细节的情况下。开发分布式程序。充分利用集群的威力进行快…

HTTP协议简介

HTTP协议HTTP协议简介 超文本传输协议&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。 HTTP的发展是由蒂姆伯纳斯-李于1989年在…

计算机组成原理读写周期波形图,第3章存储器层次结构-1讲述.ppt

第3章存储器层次结构-1讲述计算机组成原理 * 计算机组成原理 ——存储器层次结构(1) 2016-3-18 几个基本概念 1、存储器&#xff1a;计算机系统中的记忆设备&#xff0c;用来存放程序和数据。 2、存储元&#xff1a;存储器的最小组成单位&#xff0c;用以存储1位二进制代码。 3…

iOS架构篇-4 架构模式MVVM

iOS架构篇-4 架构模式MVVM MVVM原理MVVM 登录例子View:ViewModel:Model:如果觉得可以就点个👍吧,欢迎粉丝收藏,土豪打赏,您的关注就是我们创作的动力!读者有什么想看的相关技术篇章,欢迎评论留言!QQ交流群:908058499MVVM原理 #mermaid-svg-s6n4t9QkR9OeNy45 .label{fon…

CV00-01-开篇与环境搭建

目录 Intro 环境搭建 TensorFlow搭建 PyTorch搭建 PaddlePaddle搭建 Intro 从今天起学习CV&#xff0c;为期6个月&#xff0c;以三个真实项目为背景学习CV。 目前是第一个项目——车道线检测。时间两个月&#xff08;共8周&#xff09;&#xff0c;每周五、周日晚上在线…

Spring MVC环境中的文件上传功能实现

在实际开发过程中&#xff0c;尤其是web项目开发&#xff0c;文件上传和下载的需求的功能非常场景&#xff0c;比如说用户头像、商品图片、邮件附件等等。其实文件上传下载的本质都是通过流的形式进行读写操作&#xff0c;而在开发中不同的框架都会对文件上传和下载有或多或少的…

iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署)

iOS架构篇-5 CI/CD(持续集成、持续交付、持续部署) CI CI是指持续集成,代码的更新会定期自动构建、测试并合并到公共仓库中,方便多分支时解决冲突问题 CD CD是指持续交付和/或持续部署,开发人员改动代码会自动测试提交到仓库,运维实施人员将其部署到生产环境中,方便部…