在我的旧Visual Studio 6中,我发现调用itow(),看起来基本上是这样的:
#define INT_SIZE_LENGTH 20
wchar_t* _itow(wchar_t*bif, int i, int radix)
{
char abuf[INT_SIZE_LENGTH];
itoa(abuf, i, radix);
// convert_to_wide_char();
}
现在,请注意定义INT_SIZE_LENGTH
。为什么设置为20?
对于int32,最坏的情况应该是-4294967295
,对吧。这只有11个字符,加上\ 0。 (我自己的缓冲区,在_itow的调用中,只有13个长。我认为这就足够了。)
(正int64最多20个字符,负数最多21个。但这是32位整数的方法。)
我觉得我在这里错过了一些东西?任何想法都感激不尽。
(我查看了Visual Studio 2008中的代码,并且代码完全重写了。所以我猜VS6代码不太好。)
答案 0 :(得分:3)
可能是因为它可以发出非十进制数,如果radix
小于10.那么数字的位数会增加。另一方面,这意味着INT_SIZE_LENGTH
应为33,以支持二进制输出。
答案 1 :(得分:1)
MSVC有缺陷;大惊喜。正确的长度(对于任意基本支持)将是sizeof(inttype)*CHAR_BIT/log2(minbase)+2
,其中minbase
是您需要支持的最小基数。当然,将对数向下舍入。