Je veux mettre une valeur numérique dans char [] avec le nombre de chiffres spécifié. Lorsque le nombre de chiffres est petit, placez un espace (0x20) devant. Considérez l'environnement dans lequel sprintf () ne peut pas être utilisé.
#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
Ce n'est pas un codage très clair, mais cela a fonctionné pour le moment.
#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
Lorsque la valeur est 0, cela devient comme suit. Je réfléchis à ce que je veux faire.
[ ]
Mise en œuvre pour le moment http://ideone.com/sIGRt4
Recommended Posts