padding with sprintf
padding with sprintf
我有一个伪问题。我想将一个整数打印到缓冲区中,填充0,但我无法按sprintf
格式对其进行排序。我正在尝试以下
char buf[31];
int my_val = 324;
sprintf( buf, "%d030", my_val );
希望有以下字符串
"000000000000000000000000000324"
我做错了什么?这不意味着用0填充最大宽度为30个字符吗?
"%030d"
是您要查找的机器人
您的语法有点错误;以下代码产生所需的输出:
char buf[31];
int my_val = 324;
sprintf( buf, "%030d", (int)my_val );
来自维基百科关于Printf:的文章
[...] printf("%2d", 3) results in " 3", while printf("%02d", 3) results in "03".
填充和宽度位于类型说明符之前
sprintf( buf, "%030d", my_val );
尝试:
sprintf( buf, "%030d", my_val );
精度和宽度参数需要介于"%"和转换说明符"d"之间,而不是在之后。事实上,所有的标志都是这样。所以,如果你想要正数的前一个"+",请使用"%+d"。
它是%030d
,末尾键入letter。
一个相当有效的版本,不需要任何缓慢的库调用:
#include <stdio.h>
void uint_tostr (unsigned int n, size_t buf_size, char dst[buf_size])
{
const size_t str_size = buf_size-1;
for(size_t i=0; i<str_size; i++)
{
size_t index = str_size - i - 1;
dst[index] = n%10 + '0';
n/=10;
}
dst[str_size] = ' ';
}
int main (void)
{
unsigned int n = 1234;
char str[6+1];
uint_tostr(n, 6+1, str);
puts(str);
}
这可以进一步优化,尽管它可能仍然比sprintf
快几百倍。
相关文章:
- Problems with std::cin.fail()
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 使用 sprintf 将十六进制0xAABBCC转换为字符串"AA:BB:CC"
- Boost.TEST with CLion: "Test framework quit unexpectedly"
- 避免碎片化的ClientHellos with OpenSSL (DTLS)
- Issues with Win32 ReadProcessMemory API
- 高精度双精度的 Sprintf 格式化问题
- Qt with WinAPI MouseProc
- [[maybe_unused]] with structured_binding?
- Issue with WriteProcessMemory
- OpenCV RTP-Stream with FFMPEG
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- std::adjacent_difference with std::chrono time_point
- sprintf(b, "%" ) 是否定义了?
- DLL Made with CMake 使程序崩溃
- QtCreator with C 库中的链接器问题
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- C++ toString() with sprintf()
- padding with sprintf