U64=U LONG LONG的测试

#include <stdio.h>
#include <string.h>//memset
#include <stdlib.h>//free
#include <stddef.h>
#define uint8_t  unsigned char
#define uint16_t unsigned short
#define uint32_t unsigned int
#define uint64_t unsigned long long
 
int main()
{

uint64_t a=0XFFFFFFFF;
char p[16]={0};

printf("uint64_t a -10- ==%lu\r\n",a);
sprintf(p,"%lu",a);
printf("string: == %s\r\n",p);

}

 

上面 仅仅替换  uint64_t a=0XFFFFFFFFFFFFFFFF;
结果输出还是一样 也就是lu已经达到上限  也就是上面不行!!!!

 

 

怎么办??

  sprintf(p,"%llu",a);

#include <stdio.h>
#include <string.h>//memset
#include <stdlib.h>//free
#include <stddef.h>
#define uint8_t  unsigned char
#define uint16_t unsigned short
#define uint32_t unsigned int
#define uint64_t unsigned long long
 
int main()
{

uint64_t a=0XFFFFFFFFFFFFFFFF;
char p[16]={0};

printf("uint64_t a -10- ==%llu\r\n",a);
sprintf(p,"%llu",a);
printf("string: == %s\r\n",p);

}

 


修改  printf("string: == %16s\r\n",p); 此时效果一样
修改   printf("string: == %.16s\r\n",p);此时可以阶段字符串
uint64_t a -10- ==18446744073709551615

string: == 1844674407370955

在C语言中,你可以创建一个函数来将`unsigned long long`类型的十六进制值转换成字符串并存储在一个字符数组中。这里是一个简单的示例: ```c #include <stdio.h> #include <string.h> #include <ctype.h> // 引入ctype.h库,用于处理字符 // 定义一个函数,接收u64和数组指针作为参数 void hex_to_array(unsigned long long num, char hex_array[33]) { int i = 0; static const char hex_digits[] = "0123456789abcdef"; // 十六进制数字 // 将u64转换为字符串 while (num != 0) { hex_array[i++] = hex_digits[num % 16]; // 取余数并添加对应字符到数组 num /= 16; // 整除16 } // 如果最开始的数字是0,则在前面补0 if (hex_array[0] == '0' && hex_array[1] != 'x') { hex_array[0] = '\0'; // 删除多余的前导0 } else { hex_array[i] = '\0'; // 添加结束符 } // 逆序数组,因为我们在循环中从低位向高位填充 for (int j = 0; j < i / 2; j++) { char temp = hex_array[j]; hex_array[j] = hex_array[i - j - 1]; hex_array[i - j - 1] = temp; } } // 测试函数 int main() { unsigned long long test_number = 0xDEADBEEFCAFE; char hex_string[33]; hex_to_array(test_number, hex_string); printf("Hex value of u64: %s\n", hex_string); return 0; } ``` 这个函数首先遍历`u64`的每一位,并将其转换为对应的十六进制字符,然后将结果存储在数组中。注意,数组大小设为33是因为最大的16进制数需要两位(FF),加上开头的`0x`标识符共31位,再加上结束符`\0`,总共33位。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值