将short的十六进制值分配给short [关闭]
Posted
技术标签:
【中文标题】将short的十六进制值分配给short [关闭]【英文标题】:Assigning hex value of short to short [closed] 【发布时间】:2013-12-07 05:51:34 【问题描述】: short c = 34;
c 的十六进制值为 22。如何通过转换 'c' 将十六进制值分配给一个短变量(比如短 d)?
喜欢
short d = 22;
【问题讨论】:
为什么不 d = 0x22;工作” 如何通过转换'c'变量来做到这一点?short c = 10;
十六进制是0x0A
- 你打算如何转换它?
但是十六进制值也是10。我遇到这种情况将十六进制的short值分配给short。我正在为 c > 16 做。
@John Victor 十进制 10
的十六进制值是 0xA
,如上所述。
【参考方案1】:
short
对象和其他整数对象没有十进制值或十六进制值。它们的值是纯数字。
11、11 和 0xb 是同一个数字的不同名称。
要为d
分配与c
相同的值,请使用d = c;
。
当您使用printf
打印时,您可以将值格式化为十进制数字或十六进制数字。您可以将c
的值打印为十六进制数字与printf("%x", c);
。
【讨论】:
哦。但是,是否有可能将值 22 分配给 short ?无需打印。只是分配。 @JohnVictor 不,因为你永远不需要这个。如果是c = 10
,您希望将哪个值分配给d
?
@JohnVictor:您必须使用正确的术语来描述您想要的内容。要将数字 22 放入d
,只需使用d = 22;
。如果c
具有十进制数字 34 的值,并且您想将十六进制数字 22 的值放入d
,只需使用d = c;
。之所以可行,是因为十进制 34 和十六进制 22是一回事。如果您想将c
中的值转换为十六进制数字,然后将该文本重新解释为十进制数字,您可以使用sprintf
和scanf
执行此操作。如果十六进制数字包含从 A 到 F 的任何数字,这将不起作用。
@JohnVictor:注意术语:数字是一个抽象的数学事物。 numeral 是表示数字的文本字符串。 short
对象不包含文本字符串;他们只持有数字。
我明白了。 :) 感谢您的宝贵回答。【参考方案2】:
从一个短路分配到另一个时,您不需要进行任何类型的转换。对于 PC 来说,它只是比特的集合。您如何解释它们(如十六进制、十进制等)是您编写代码的高级决策。如果您在“c”中有正确的十六进制(或其他)值,只需将其分配给“d”。
【讨论】:
【参考方案3】:机器对数字系统一无所知。它们用于人类感知数字。
您只能在人机交互发生时“翻译”数字:
在输入时从人类形式到机器形式(人类 >> 机器) 在输出上从机器形式到人类形式(机器 >> 人类)输出示例:
short c = 10; // for you its "decimal ten" now,
// for machine is just a handful of bits
printf("d = %d\n", c); // you explicitly say here to output as decimal
printf("d = 0x%.4X", c); // you explicitly say here to output as hexadecimal
因此,与其尝试在程序的逻辑部分内部进行翻译,不如转到输出部分并在那里进行翻译。
希望对你有帮助!
【讨论】:
【参考方案4】:使用字符串缓冲区和sprintf
十六进制格式。
然后用atoi
写回如下
#include <stdio.h>
#include <stdlib.h>
int main()
short c = 34;
short d;
char string[10];
sprintf(string, "%x", c);
d = atoi(string);
printf("c = %d\n", c);
printf("d = %d\n", d);
return 0;
给出输出
c = 34
d = 22
【讨论】:
-1。 Try c = 10.以上是关于将short的十六进制值分配给short [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
以最小的精度损失将 float 转换为 short [关闭]