是否有标准的C / C ++标头,其定义为byte,kilobyte,megabyte,......? 我不想做自己的定义。在我看来这很脏。
示例:
if (size > MEGABYTE)
{ ... }
答案 0 :(得分:12)
不,没有这样的标准定义。可能是因为附加值非常小。
您经常会看到以下内容:
#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。这“利用”了千字节,兆字节等经典定义在计算中使用2的幂的事实。
对size_t
的强制转换是好的,因为这些是大小,我们希望它们可以作为参数用于例如malloc()
。
使用上述内容,在代码中使用它们变得非常实用:
unsigned char big_buffer[MB(1)];
或 if(statbuf.st_size&gt; = KB(8)) { printf(“文件为8 KB(或更大)\ n”); }
但你当然可以用它们来做进一步的定义:
#define MEGABYTE MB(1)
答案 1 :(得分:5)
正如其他答案指出的那样,没有。 C ++ 11中一个很好的解决方案是使用用户定义的文字:
constexpr std::size_t operator""_kB(unsigned long long v) {
return 1024u * v;
}
std::size_t some_size = 15_kB;
答案 2 :(得分:2)
没有。但是你为什么不自己制造它们呢?
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;
答案 3 :(得分:0)
并不是说它增加了很多,但是我很喜欢这种形式:
#define KILOBYTES * 1024UL
#define MEGABYTES * 1048576
#define GIGABYTES * 1073741824UL
您可以使用like
if (size > 10 MEGABYTES) { ...