相关疑难解决方法(0)

以十六进制表示形式获取缓冲区到字符串流:

如果我有一个缓冲区,如:

uint8_t buffer[32];
Run Code Online (Sandbox Code Playgroud)

并且它完全被值填充,我怎么能用十六进制表示法将它变成字符串流,在小值上用0填充?

我试过了:

std::stringstream ss;
for (int i = 0; i < 32; ++i)
{
    ss << std::hex << buffer[i];
}
Run Code Online (Sandbox Code Playgroud)

但是当我从字符串流中取出字符串时,我遇到了一个问题:值<16的字节只需要一个字符来表示,我希望它们是0填充的.

例如,如果数组中的字节1和2是{32} {4},我的字符串流将具有:

204 instead of 2004
Run Code Online (Sandbox Code Playgroud)

我可以将格式化应用于stringstream以某种方式添加0-padding吗?我知道我可以用sprintf做到这一点,但是这些流已经被用于获取大量信息,并且以某种方式实现这一点将是一个很大的帮助.

c++ stringstream

30
推荐指数
3
解决办法
3万
查看次数

char []到十六进制字符串练习

下面是我当前的char*到十六进制字符串函数.我把它写成一个位操作练习.在AMD Athlon MP 2800+上花费大约7毫秒来对1000万字节阵列进行取消.我缺少任何技巧或其他方式吗?

我怎样才能让它更快?

用-O3以g ++编译

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 << …
Run Code Online (Sandbox Code Playgroud)

c++ optimization hex

6
推荐指数
2
解决办法
2万
查看次数

标签 统计

c++ ×2

hex ×1

optimization ×1

stringstream ×1