Ich möchte einen numerischen Wert in char [] mit der angegebenen Anzahl von Ziffern einfügen. Wenn die Anzahl der Ziffern gering ist, setzen Sie ein Leerzeichen (0x20) vor. Betrachten Sie die Umgebung, in der sprintf () nicht verwendet werden kann.
#include <stdio.h>
void SetValToCharArray(int val, int length, char *dstPtr)
{
int loop;
int digit;
int work;
work = val;
digit = 0;
while(work > 0) {
work /= 10;
digit++;
}
for(loop=0; loop < (length-digit); loop++) {
*dstPtr = ' ';
dstPtr++;
}
dstPtr += (digit - 1);
work = val;
for(loop=0; loop< digit; loop++) {
*dstPtr = (work % 10) + '0';
work /= 10;
dstPtr--;
}
}
int main(void) {
int val = 32768;
char szBuf[10];
memset(szBuf, 0, sizeof(szBuf) );
SetValToCharArray(val, /*length=*/7, &szBuf[0]);
printf("[%s]\n", szBuf); // [ 32768]
// for check
sprintf(szBuf, "%7d", val);
printf("[%s]\n", szBuf);
return 0;
}
http://ideone.com/5b6usH
Es ist keine sehr saubere Codierung, aber es hat vorerst funktioniert.
#include <stdio.h>
#include <stdbool.h>
void SetValToCharArray(int val, int length, char *dstPtr)
{
int loop;
int digit;
int work;
bool minus = false;
if (val < 0) {
minus = true;
val = (-val);
length--;
}
work = val;
digit = 0;
while(work > 0) {
work /= 10;
digit++;
}
for(loop=0; loop < (length-digit); loop++) {
*dstPtr = ' ';
dstPtr++;
}
if (minus) {
*dstPtr = '-';
dstPtr++;
}
dstPtr += (digit - 1);
work = val;
for(loop=0; loop < digit; loop++) {
*dstPtr = (work % 10) + '0';
work /= 10;
dstPtr--;
}
}
int main(void) {
int val = -271;
char szBuf[10];
memset(szBuf, 0, sizeof(szBuf) );
SetValToCharArray(val, /*length=*/7, &szBuf[0]);
printf("[%s]\n", szBuf); // [ 32768]
// for check
sprintf(szBuf, "%7d", val);
printf("[%s]\n", szBuf);
return 0;
}
http://ideone.com/W7BqSz
Wenn der Wert 0 ist, wird er wie folgt. Ich überlege, was ich tun möchte.
[ ]
Implementierung vorerst http://ideone.com/sIGRt4
Recommended Posts