Messages in this thread | | | Date | Wed, 11 Feb 2004 10:23:38 -0500 (EST) | From | "Richard B. Johnson" <> | Subject | Re: printk and long long |
| |
On Wed, 11 Feb 2004 wdebruij@dds.nl wrote:
> how about simply using a shift to output two regular longs, i.e. > > printk("%ld%ld",loff_t >> (sizeof(long) * 8), loff_t << sizeof(long) * 8 >> > sizeof(long) * 8); > > perhaps you could even place this ghastly code in a macro if you have to access > it often (so that you don't have to look at it :)? > > I know it's not pretty, but at least the %ld is considered standard printf > functionality. I don't think %lld (even if it is implemented in some printf > derivates) can be considered portable. > > Willem > Citeren sting sting <zstingx@hotmail.com>: > > > Hello, > > I am trying to perfrom printk with a variable of type long long. > > (loff_t is that type and it is long long , as can be seen in > > posix+types.h). > > what is the format string for such a type ? > > I had tried %lld" but it gace wrpng results. > > regards, > > sting
This is probably portable. I could do it much simpler in assembly but it wouldn't be portable.
Printing both unsigned long long and signed long long.
#include <stdio.h>
unsigned long long tester0 = 12345678901234567890ULL; unsigned long long tester1 = 0xffffffffffffffff;
char *ulltoa(char *buf, unsigned long long val) { char tmp[0x20]; char *cp = tmp; char *rp = buf; do { *cp++ = (char) (val%10ULL) + '0'; val /= 10ULL; } while (val); do { *buf++ = *(--cp); } while (cp != tmp); *buf = 0x00; return rp; }
char *lltoa(char *buf, long long val) { char *cp = buf; if(val < 0) { *cp++ = (char) '-'; val = ~val + 1LL; } (void) ulltoa(cp, (unsigned long)val); return buf; }
int main() { char buf[0x100];
printf("%llu\n", 0ULL); printf("%llu\n", tester0); printf("%llu\n", tester1); printf("%s\n", ulltoa(buf, 0ULL)); printf("%s\n", ulltoa(buf, tester0)); printf("%s\n", ulltoa(buf, tester1)); printf("%s\n", lltoa(buf, tester1));
return 0; }
Cheers, Dick Johnson Penguin : Linux version 2.4.24 on an i686 machine (797.90 BogoMips). Note 96.31% of all statistics are fiction.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |