Tag: hex

将原始数据打印到固定长度的hex输出

我有一个结构,指向结构的指针,我希望将前n个字节作为长hex数字打印,或者作为hex字节的字符串。 基本上我需要printf等效的gdb的检查内存命令,x / nxb。 如果可能的话,我仍然希望使用printf作为程序的记录器function,只是它的变体。 如果我可以在不循环数据的情况下这样做,那就更好了。

为什么打印0(零)而没有使用C打印格式“%#x”的前导“0x”?

背景:我有许多脚本通过查找前导“0x”来解析查找hex数的日志文件。 我们的嵌入式C库改为新的printf。 新的printf比我们之前更符合标准,我的脚本破了。 在Linux机器上: #include int main( void ) { printf( “%#010x\n”, 0 ); printf( “%#010x\n”, 1 ); return 0; } 输出(使用glibc)是: 0000000000 0x00000001 我们公司的输出是: 0x00000000 0x00000001 从printf(3)开始,在’#’标志字符上:“对于x和X转换,非零结果的前缀为字符串”0x“(或X转换为”0X“)。” 我很好奇为什么 。 如果没有挖掘C标准文件或为标准委员会成员购买午餐,为什么不在零价值论证中使用前导0x?

打印值0x89时的奇怪输出(-119)

正如标题所说,运行以下代码时,我得到一个“奇怪”的结果: #include int main() { char buff[4] = {0x17, 0x89, 0x39, 0x40}; unsigned int* ptr = (unsigned int*)buff; char a = (char)((*ptr <> (3*8)); char b = (char)((*ptr <> (3*8)); char c = (char)((*ptr <> (3*8)); char d = (char)((*ptr <> (3*8)); printf(“0x%x\n”, *ptr); printf(“0x%x\n”, a); printf(“0x%x\n”, b); printf(“0x%x\n”, c); printf(“0x%x\n”, d); return 0; } […]

如何将字节数组(包含hex值)转换为十进制

我正在为Atmel微控制器编写一些代码。 我通过Uart获取一些数据,并将这些hex值存储到一个数组中。 假设数组的元素是:1F,29和3C。 我想有一个像0x1F293C这样的hex数,并将其转换为十进制数。 所以,我想最后得到“2042172”。 该数组可以有n个元素,所以我需要一个通用的解决方案。 谢谢。

如何将char转换为以uint8_tforms存储的hex?

假设我有这些变量, const uint8_t ndef_default_msg[33] = { 0xd1, 0x02, 0x1c, 0x53, 0x70, 0x91, 0x01, 0x09, 0x54, 0x02, 0x65, 0x6e, 0x4c, 0x69, 0x62, 0x6e, 0x66, 0x63, 0x51, 0x01, 0x0b, 0x55, 0x03, 0x6c, 0x69, 0x62, 0x6e, 0x66, 0x63, 0x2e, 0x6f, 0x72, 0x67 }; uint8_t *ndef_msg; char *ndef_input = NULL; 如何将ndef_input (只是一个纯文本,如“hello”)转换为hex并保存到ndef_msg ? 如您所见, ndef_default_msg是hexforms。 ndef_msg数据ndef_msg应该是这样的。 有点背景,在原始程序( 源代码 )中,程序将打开一个文件,获取数据并将其放入ndef_msg […]

如何使用C将二进制字符串转换为hex?

如何使用C将8位二进制字符串(例如“10010011”)转换为hex?

用C ++中的前导零改变hex数位,(C)

我有hex字符串中的这个数字: 002A05. 我需要将这个数字的第7位设置为1,所以转换后我会得到 022A05 但它必须与每6个字符hex数一起使用。 我尝试通过strtol将hex字符串转换为整数,但该函数条带前导零。 请帮帮我怎样才能解决。

printf语句中转换的百分比如何?

也许这不属于SO,但我不知道在哪里。 我必须用C重新实现printf(3)而不使用任何可以为我做转换的函数,我差不多完成了,但是我被困在%a ,我真的不明白这里发生了什么,例如: printf(“%a\n”, 3.0); //#=> 0x1.8p+1 printf(“%a\n”, 3.1); //#=> 0x1.8cccccccccccdp+1 printf(“%a\n”, 3.2); //#=> 0x1.999999999999ap+1 printf(“%a\n”, 3.3); //#=> 0x1.a666666666666p+1 printf(“%a\n”, 3.4); //#=> 0x1.b333333333333p+1 printf(“%a\n”, 3.5); //#=> 0x1.cp+1 printf(“%a\n”, 3.6); //#=> 0x1.ccccccccccccdp+1 我当然读到了那个说: double参数被舍入并在样式[ – ] 0xh.hhhp [+ – ] d中转换为hex表示法,其中hex点字符后面的位数等于精度规范。 但这并没有真正帮助我不理解将3.2转换为1.999999999999ap+1 我不需要任何代码,但更多的解释。 PS:如果这不是这个问题的地方,你可以指引我到正确的地方吗? 编辑:虽然@juhist答案适用于数字> = 1.0但它没有解释如何获得0.0和1.0之间的数字的结果: printf(“%a\n”, 0.01); //#=> 0x1.47ae147ae147bp-7 printf(“%a\n”, 0.1); //#=> 0x1.999999999999ap-4 printf(“%a\n”, […]

C内核 – 在VM上工作正常但不是真正的计算机吗?

我正在制作一个基本的C内核。 (由汇编程序加载)我正在用Windows的i686-elf交叉编译器编译它。 我的C代码如下: void cls(); void drawhappy(); void main(){ char *vidptr = (char *)0xb8000; cls(); drawhappy(); } void cls(){ char *vidptr = (char *)0xb8000; unsigned int j = 0; while(j < 80*2*25){ vidptr[j] = ' '; vidptr[j+1] = 0x07; j = j+2; } } void drawhappy(){ char *vidptr = (char *)0xb8000; const unsigned int linewidth […]

在C中将hex转换为字符串?

您好我正在使用digi动态c。 我试图将其转换为字符串 char readingreg[4]; readingreg[0] = 4a; readingreg[1] = aa; readingreg[2] = aa; readingreg[3] = a0; 目前,当我做printf语句时,它必须是这样的: printf(“This is element 0: %x\n”, readingreg[0]); 但我想在字符串中这样,所以我可以像这样使用printf语句 printf(“This is element 0: %s\n”, readingreg[0]); 我本质上是通过TCP / IP端口发送readingreg数组,我需要将它作为字符串。 我似乎无法将其转换为字符串。 谢谢你的帮助。 此外,如果有人可以告诉我如何一次完成每个元素而不是整个数组,那将是很好的,因为只有4个元素。