xia*_*ian 11 c++ memory swap std
typedef unsigned char Byte;
...
void ReverseBytes( void *start, int size )
{
Byte *buffer = (Byte *)(start);
for( int i = 0; i < size / 2; i++ ) {
std::swap( buffer[i], buffer[size - i - 1] );
}
}
Run Code Online (Sandbox Code Playgroud)
这个方法现在做的是它在内存中反转字节.我想知道的是,有没有更好的方法来达到同样的效果?整个"尺寸/ 2"部分似乎是一件坏事,但我不确定.
编辑:我刚刚意识到我为这个问题提出的标题有多糟糕,所以我[希望]修复它.
kmk*_*lan 26
标准库具有以下std::reverse
功能:
#include <algorithm>
void ReverseBytes( void *start, int size )
{
char *istart = start, *iend = istart + size;
std::reverse(istart, iend);
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*ner 18
不使用STL的高性能解决方案:
void reverseBytes(void *start, int size) {
unsigned char *lo = start;
unsigned char *hi = start + size - 1;
unsigned char swap;
while (lo < hi) {
swap = *lo;
*lo++ = *hi;
*hi-- = swap;
}
}
Run Code Online (Sandbox Code Playgroud)
虽然问题是3岁半,但其他人可能会寻找相同的东西.这就是为什么我仍然发布这个.
归档时间: |
|
查看次数: |
15552 次 |
最近记录: |