是否有标准的 C/C++ 标头定义字节、千字节、兆字节,...?我不想自己定义。在我看来它很脏。
例子:
if (size > MEGABYTE)
{ ... }
是否有标准的 C/C++ 标头定义字节、千字节、兆字节,...?我不想自己定义。在我看来它很脏。
例子:
if (size > MEGABYTE)
{ ... }
不,没有这样的标准定义。可能是因为附加值很小。
你经常会看到这样的事情:
#define KB(x) ((size_t) (x) << 10)
#define MB(x) ((size_t) (x) << 20)
这使用左移来表示操作x * 2 10与x * 1,024 相同,对于 2 20也相同,即 1,024 * 1,024 即 1,048,576。这“利用”了千字节、兆字节等的经典定义在计算中使用二的幂的事实。
转换size_t
为很好,因为这些是大小,我们希望它们可以很容易地用作 eg 的参数malloc()
。
使用上述内容,在代码中使用它们变得非常实用:
unsigned char big_buffer[MB(1)];
或 if( statbuf.st_size >= KB(8) ) { printf("文件为 8 KB (或更大)\n"); }
但是您当然可以只使用它们来进行进一步的定义:
#define MEGABYTE MB(1)
正如其他答案指出的那样,没有。C++11 中一个不错的解决方案是使用用户定义的文字:
constexpr std::size_t operator""_kB(unsigned long long v) {
return 1024u * v;
}
std::size_t some_size = 15_kB;
那没有。但是为什么你不自己制作它们:
const unsigned long BYTE = 1;
const unsigned long KILOBYTE = 1024;
const unsigned long MEGABYTE = 1024 * 1024;
const unsigned long GIGABYTE = 1024 * 1024 * 1024;
并且
const unsigned long long TERABYTE = 1024ULL * 1024 * 1024 *1024;
并不是说它增加了很多,但我很喜欢这种形式:
#define KILOBYTES * 1024UL
#define MEGABYTES * 1048576
#define GIGABYTES * 1073741824UL
你可以像这样使用
if (size > 10 MEGABYTES) { ...