如何解决如何将char转换为十六进制和二进制
| 我在C中有以下示例:int x = 123;
size of int = 4 bytes.
hex value = 7b
binary value = 0111 1011
如果我的x是char,十六进制/二进制值是多少?
char x = 123;
size of char = 1 byte.
hex value = ??
binary value = ??
解决方法
由于
char
小于than3ѭ,因此将是相同的。除了前导零外,您会发现int
。
尝试这个:
6 int x = 123;
7
8 printf (\"Size of int is %d bytes\\n\",sizeof(int));
9 printf (\"Size of char is %d byte\\n\",sizeof(char));
10
11 printf (\"Hex value is %x\\n\",x);
12 printf (\"Hex value is %x\\n\",(char)x);
13
14 printf (\"As for binary value .... google is your friend\\n\");
输出为:
Size of int is 4 bytes
Size of char is 1 byte
Hex value is 7b
Hex value is 7b
至于二进制值..谷歌是你的朋友
这个网站似乎解释得很好
, 它的十六进制和二进制值将完全相同(如果要将其扩展为完整大小,则前导零可能除外)。
那是因为123恰好适合char
。带符号的char至少可以包含值-127
到127
(二进制补码可以处理-128
,但是ISO标准允许负号的补码和正负号作为两个其他负数编码,这两个编码都不能处理) -128
),一个至少为0
到255
的无符号字符。
假设一个8位字节和4字节int:
Value HexInt HexChar BinaryInt BinaryChar
----- ------ ------- --------------------------------------- ----------
123 7B 7B 0000 0000 0000 0000 0000 0000 0111 1011 0111 1011
二进制值0111 1011
计算如下:
0111 1011
||| | ||
||| | |+- 1
||| | +-- 2
||| |
||| +---- 8
||+------ 16
|+------- 32
+-------- 64
===
123
如果试图将一个值放入一个大于8位的8位ѭ2中,则最低有效位通常是保留的那些。
char xyz = 0x1234; // results in xyz being given the value 0x34.
这在C99的6.3.1.3/2
和/3
部分中有详细说明:
1 /当将整数类型的值转换为_Bool以外的其他整数类型时,如果该值可以用新类型表示,则该值不变。
2 /否则,如果新类型是无符号的,则通过重复添加或减去比新类型可表示的最大值多一个值来转换该值,直到该值在新类型的范围内为止。
3 /否则,将对新类型进行签名,并且无法在其中表示值;结果是实现定义的,还是引发实现定义的信号。
, 十进制123是十六进制的0x7b,二进制是0111 1011,与原始类型无关。该类型唯一的障碍是溢出(例如(21ѭ)。有时,signed char
和unsigned char
的显示可能会有所不同。
, 会是一样的。十六进制0x7b,0111 1011
请注意,如果您的整数是4个字节,则其位为0000 0000 0111 1011。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。