关于C#:char []十六进制字符串练习

关于C#:char []十六进制字符串练习

char[] to hex string exercise

下面是我当前使用的char *到十六进制字符串的函数。我将其写为位操纵的练习。在AMD Athlon MP 2800上花费约7毫秒来十六进制一千万个字节的阵列。我有什么想念的技巧或其他方式吗?

如何使它更快?

用-O3 in g

编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static const char _hex2asciiU_value[256][2] =
     { {'0','0'}, {'0','1'}, /* snip..., */ {'F','E'},{'F','F'} };

std::string char_to_hex( const unsigned char* _pArray, unsigned int _len )
{
    std::string str;
    str.resize(_len*2);
    char* pszHex = &str[0];
    const unsigned char* pEnd = _pArray + _len;

    clock_t stick, etick;
    stick = clock();
    for( const unsigned char* pChar = _pArray; pChar != pEnd; pChar++, pszHex += 2 ) {
        pszHex[0] = _hex2asciiU_value[*pChar][0];
        pszHex[1] = _hex2asciiU_value[*pChar][1];
    }
    etick = clock();

    std::cout <<"ticks to hexify" << etick - stick << std::endl;

    return str;
}

更新

添加了计时码

Brian R. Bondy:用堆分配的缓冲区替换std :: string并将ofs * 16更改为ofs << 4-但是堆分配的缓冲区似乎减慢了速度? -结果?11ms

Antti Syk?ri:用

替换内部循环

1
2
3
4
 int upper = *pChar >> 4;
 int lower = *pChar & 0x0f;
 pszHex[0] = pHex[upper];
 pszHex[1] = pHex[lower];

结果?8ms

Robert:用完整的256项表替换_hex2asciiU_value,牺牲了内存空间,但结果是?7ms!

HoyHoy:注意到它产生了不正确的结果


n


n


n


一次操作32位(4个字符),然后根据需要处理尾部。当我使用url编码进行此练习时,每个字符的全表查找都比逻辑结构快一点,因此您可能还想在上下文中进行测试以考虑缓存问题。


n


对于一个,而不是乘以16而不是bitshift << 4

也不要使用std::string,而是只在堆上创建一个缓冲区,然后delete。这将比字符串所需的对象销毁更有效率。


n


n


不会有太大的不同... * pChar-(ofs * 16)可以使用[* pCHar


n


n


n


n


n


n


n


推荐阅读

    linux中编译命令是?

    linux中编译命令是?,系统,代码,工具,基础,名字,命令,编译器,文件,终端,源程

    linux源码编译命令?

    linux源码编译命令?,代码,设备,环境,工作,官网,最新,下来,电脑,软件,项目,如

    linux终端编译命令?

    linux终端编译命令?,代码,工具,环境,系统,终端,文件,源程序,编译器,语言,指

    linux命令和库函数?

    linux命令和库函数?,系统,标准,管理,地址,服务,库函数,环境,平台,第一,状态,1

    字符串查找命令linux?

    字符串查找命令linux?,系统,字符串,工具,信息,文件,命令,字符,选项,文本,范

    linux命令行编译文件?

    linux命令行编译文件?,代码,系统,项目,工具,网上,手机,电脑,地址,官网,文件,L

    linux命令替换字符串?

    linux命令替换字符串?,字符串,文件,批量,首次,数据,命令,内容,方法,用字,结

    linux系统编译命令?

    linux系统编译命令?,系统,代码,百度,暂停,电脑,工具,命令,终端,内核,程序,Lin

    linux查看函数命令?

    linux查看函数命令?,系统,信息,名称,命令,位置,情况,公用,名字,标准,资料,lin

    linux交叉编译命令?

    linux交叉编译命令?,工具,平台,位置,网上,环境,基础,代码,编译器,路径,目标,

    linux编译源代码命令?

    linux编译源代码命令?,工具,代码,百度,最新,环境,项目,系统,电脑,密码,内核,l

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    linux拼接字符串命令?

    linux拼接字符串命令?,系统,工作,代码,工具,名称,信息,地址,时间,数据,命令,l

    linux只能命令行编译?

    linux只能命令行编译?,系统,代码,工具,软件,密码,平台,项目,设计,最新,设备,L

    linux命令行编译c?

    linux命令行编译c?,代码,环境,系统,工具,平台,终端,程序,编辑,文件,源程序,在

    添加字符串命令linux?

    添加字符串命令linux?,情况,名称,文件,位置,名字,地方,连续,信息,命令,内容,L

    linux中如何编译命令?

    linux中如何编译命令?,系统,代码,基础,暂停,环境,工具,百度,命令,文件,终端,

    调用函数命令linux?

    调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎

    linux编译连接命令?

    linux编译连接命令?,系统,代码,环境,工具,文件,资料,电脑,百度,终端,命令,在l

    linux内核编译命令?

    linux内核编译命令?,系统,软件,环境,电脑,内核,最新,下来,官网,体系,名字,在l