`
larrytang
  • 浏览: 20265 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

一些代码片段

    博客分类:
  • VC++
阅读更多
1.不要用return语句返回指向“栈内存”指针。
char* getmem(int num)
{
    char *p = (char*)malloc(sizeof(char)*num);
    return p;
}

int main(int argc, char* argv[])
{
    char *str = NULL;
    str = getmem(12);
    strcpy(str, "Hello fuck!");
    cout<<str<<endl;
    free(str);
    return 0;
}

这种方式是可以的,因为返回的不是“栈内存”指针。所谓的“栈内存”指针是指固定大小的数组、
变量等。

2.一个不错的字符串 hash 函数
unsigned long hash(const char *name,size_t len)
{
    unsigned long h=(unsigned long)len;
    size_t step = (len>>5)+1;
    for (size_t i=len; i>=step; i-=step)
        h = h ^ ((h<<5)+(h>>2)+(unsigned long)name[i-1]);
    return h;
}

一个方便的 hash 函数应该散列的比较开,计算速度跟字符串长度关系不大,又不能只计算字符
串的开头或末尾。这里的算法是从Lua 中看来的。

3.UTF8 到 UTF16 的转换(单个字符)
int UTF8toUTF16(int c)
{
    signed char *t=(signed char*)&c;
    int ret=*t &(0x0f | (~(*t>>1) &0x1f) | ~(*t>>7));
    int i;
    assert ((*t & 0xc0) != 0x80);
    for (i=1;i<3;i++) {
        if ((t[i] & 0xc0)!=0x80) {
            break;
        }
        ret=ret<<6 | (t[i] & 0x3f);
    }
    return ret;
}

这只是一个字符的转换,如果转换字符串,可以再做一点优化。

4.宽字符和窄字符转换的问题
BOOL UnicodeToAnsi(LPWSTR pszwUniString, LPSTR pszAnsiBuff, DWORD dwAnsiBuffSize)
{
    int iRet = 0;
    iRet = WideCharToMultiByte(CP_ACP, 0, pszwUniString, -1, pszAnsiBuff,
    dwAnsiBuffSize, NULL, NULL);
    return (0 != iRet);
}

BOOL AnsiToUnicode(LPSTR pszAnsiString, LPWSTR pszwUniBuff, DWORD dwUniBuffSize)
{
    int iRet = 0;
    iRet = MultiByteToWideChar(CP_ACP, 0, pszAnsiString, -1, pszwUniBuff,
    dwUniBuffSize);
    return (0 != iRet);
}


// 应用示例
LPSTR lpCmdLine;
LPWSTR lpwCmdLine;
AnsiToUnicode(lpCmdLine, lpwCmdLine, sizeof(lpwCmdLine));
lpCmdLine = NULL;
UnicodeToAnsi(lpwCmdLine, lpCmdLine, sizeof(lpwCmdLine));
static_cast<char*>(lpCmdLine);
// Function that safely converts a 'WCHAR' String to 'LPSTR':
char* ConvertLPWSTRToLPSTR (LPWSTR lpwszStrIn)
{
    LPSTR pszOut = NULL;
    if (lpwszStrIn != NULL)
    {
        int nInputStrLen = wcslen (lpwszStrIn);
        // Double NULL Termination
        int nOutputStrLen = WideCharToMultiByte (CP_ACP, 0, lpwszStrIn, nInputStrLen, NULL, 0, 0, 0) + 2;
        pszOut = new char [nOutputStrLen];
        if (pszOut)
        {
            memset (pszOut, 0x00, nOutputStrLen);
            WideCharToMultiByte(CP_ACP, 0, lpwszStrIn, nInputStrLen, pszOut,
            nOutputStrLen, 0, 0);
        }
    }
    return pszOut;
}
分享到:
评论

相关推荐

    CodeFragment:这是一些代码片段存储库

    "CodeFragment:这是一些代码片段存储库"的标题表明这是一个存储各种代码片段的集合,可能是为了方便开发者查找、学习或者复用。描述进一步确认了这个仓库的目的,即保存和组织代码片段。 在标签中提到了"Java",这...

    snippets插件 IDEA代码块插件 IDEA代码片段插件

    idea原生代码片段管理插件Live Templates无法可视化管理,个人已习惯MyEclipse的Snippets插件,无耐idea无提供相关插件,开发人员在开发过程中大部分时间都是拷贝代码,如果能有相关插件来维护常用的代码片段,可以...

    微信小程序sublime开发工具-自动补全代码片段

    微信小程序sublime开发工具-自动补全代码片段微信小程序sublime开发工具-自动补全代码片段微信小程序sublime开发工具-自动补全代码片段微信小程序sublime开发工具-自动补全代码片段微信小程序sublime开发工具-自动...

    代码片段管理.rar

    《代码片段管理——高效开发的得力助手》 在软件开发过程中,代码片段管理是提高工作效率、保持代码规范性以及方便团队协作的重要手段。本文将深入探讨“代码片段管理”这一主题,分析其核心概念、功能及应用,同时...

    vscode 使用C语言自定义代码片段

    在VSCode中,用户可以通过自定义代码片段来提高编码效率,减少重复输入常用代码的工作量。自定义代码片段是VSCode的一项强大功能,允许开发者根据个人需求设置快捷方式,快速生成预定义的代码模板。 本文将详细讲解...

    用来管理代码片段的软件

    代码管理是IT行业中一个至关重要的环节,特别是在软件开发过程中,高效地组织和检索代码片段能够极大地提高工作效率。本文将深入探讨“代码片段管理”这一主题,以及如何利用特定的软件来解决这一问题。 首先,代码...

    C#代码片段编译器

    《C#代码片段编译器:轻量级的编程利器》 在计算机编程的世界里,高效、便捷的工具是开发者的重要伙伴。今天我们要探讨的是名为"C#代码片段编译器"的一款小型集成开发环境(IDE),它如同便携版的Visual Studio,为...

    在VSCode中轻松生成代码片段

    3. **高级特性**:VSCode的代码片段还支持一些高级特性,例如变量和占位符。变量允许你根据输入值动态改变代码片段的内容,而占位符则允许你在插入代码后光标可以直接定位到特定位置,进行后续编辑。例如: ``` ...

    腾讯 QMUI Team 常用的 Xcode Code Snippets 代码片段,加速开发效率!.zip

    而“也包含若干专用于QMUI iOS框架的代码片段”则意味着还有一些特定的代码片段是针对QMUI框架设计的,这些片段可能包括QMUI库的特定组件初始化、事件处理等,能帮助开发者更好地理解和使用QMUI框架。 【标签】...

    vs2008代码片段管理器(源码)

    《Visual Studio 2008 代码片段管理器:源码解析与自定义指南》 在软件开发过程中,代码重用是提高效率的关键。Visual Studio 2008(VS2008)中的代码片段管理器是一个强大的工具,它允许开发者快速插入预先定义好...

    关于visual studio 版本的{代码片段管理工具}

    关于visual studio 版本的{代码片段管理工具}

    vscode+autojs代码自动补全(用户代码片段配置)

    自1.3.0版本以后就没有自动补全功能了,也就是说1.2.4以前的版本是有自动补全功能的,下面是几种使用自动补全的方法。 1.使用旧版本 2.使用另一个插件 3.使用用户代码片段 此处为配置用户代码片段的文件!

    verilog_snippets:VS Code中将使用Verilog HDL的一些代码片段

    本资源"verilog_snippets"提供了在VS Code中编写Verilog代码时可以使用的便捷代码片段。 这些代码片段通常包含了常见的Verilog语法结构,如模块声明、输入/输出端口定义、变量声明、运算符、条件语句、循环结构以及...

    php-tools:PHP中经常使用的一些代码片段

    PHP工具 PHP中经常使用的一些代码片段。 需要PHP 7.4 / 8.0及更高版本。 实用类班级名称功能说明 SM3加密工具 支持HMac的自定义算法 生成uuid字符串路径运算符 crc64算术工具 数组和地图数据工具 RSA crypt工具日期...

    SnippetStore一个管理代码片段的桌面Electron应用

    《SnippetStore:高效管理代码片段的桌面应用》 在当今快速发展的软件开发环境中,代码片段的管理和重用已经成为提升开发效率的重要手段。"SnippetStore"是一个专为开发者设计的桌面应用,它基于Electron框架,旨在...

    rmarkdown-vscode:该扩展为.Rmd文档中的常见任务提供了一些代码片段和键绑定,例如插入代码块并使用knitr包括图像

    该扩展为.Rmd文档中的常见任务提供了一些代码片段和键绑定,例如,插入代码块并使用knitr::include_graphics()包括图像。 此外,它旨在为Bookdown和Blogdown提供一些帮助功能。 该项目处于发展的初期。 欢迎捐款...

    每位设计师都应该拥有的50个CSS代码片段 sublime text代码片段

    Sublime Text是一款广受欢迎的代码编辑器,拥有强大的代码片段功能,可以帮助设计师和开发者提高工作效率。这个名为“wwek-plugin-sublime-snippets”的压缩包文件,很可能是为Sublime Text设计的一套CSS代码片段...

    精选的 PHP 代码片段和学习资料可以让你在 30 秒内学会

    精选的 PHP 代码片段可以让您在30秒内快速学习和了解 PHP 编程。...这里是一些精选的 PHP 代码片段,可以帮助您快速学习和了解 PHP 编程。学习这些高级技巧,您还可以进一步提升 PHP 编程的能力和效率。

    VS C# 代码片段

    ### VS C# 代码片段详解 #### 一、Attribute自动生成属性 在C#中,`attribute`关键字用于定义元数据或对程序元素(如类、方法等)进行标记。这里提到的“自动生成属性”可能是指通过某种方式快速生成包含`...

    strokeit批量生成代码片段.lua

    strokeit批量生成代码片段.lua,strokeit批量生成代码片段.lua,strokeit批量生成代码片段.lua

Global site tag (gtag.js) - Google Analytics