如何在c中将int转换为byte?
How to convert int to byte in c?
我想在 C 中将 int 转换为 byte。
我怎样才能得到价值?
in Java
int num = 167;
byte b = num.toByte(); // -89
in C
int num = 167;
???
您可以简单地转换为一个字节:
unsigned char b=(unsigned char)num;
请注意,如果 num
大于 255 或小于 0 C 不会崩溃,只会给出错误的结果。
原生 C 中没有 Byte 这样的类型。尽管如果您不想导入新的库,您可以像这样创建一个:
typedef unsigned char Byte
然后用它创建您想要的任何变量:
int bar = 15;
Byte foo = (Byte)bar
byte
是 java 有符号整数类型,范围为 -128
到 127
。
C 中对应的类型是 int8_t
在 <stdint.h>
中定义的,用于具有 8 位字节的体系结构。它是 signed char
.
的别名
你可以这样写:
#include <stdint.h>
void f() {
int num = 167;
int8_t b = num; // or signed char b = num;
...
如果您的编译器发出有关隐式转换为较小类型的警告,您可以添加显式强制转换:
int8_t b = (int8_t)num; // or signed char b = (signed char)num;
但是请注意,将 8 位字节视为 0
到 255
范围内的无符号数量更为常见,对此我们将使用类型 uint8_t
或unsigned char
。 java byte
是有符号类型的原因可能是这种语言中没有无符号类型,但对于非母语读者来说这很容易混淆。
byte
也可以定义为 typedef:
typedef unsigned char byte; // 0-255;
或
typedef signed char byte; // -128-127;
不要使用 char
类型,因为它是实现定义的,默认情况下此类型是有符号的还是无符号的。为 C 字符串中的字符保留类型 char
,尽管许多函数实际上认为这些是无符号的:strcmp()
,函数来自 <ctype.h>
...
在计算机科学中,术语 byte 被明确定义为 8 位原始数据块。显然 Java 使用与计算机科学不同的定义...
-89
是 而不是 值 167
“转换为字节”。 167
已经适合一个字节,因此无需转换。
-89
是值 167
转换为 带符号 2 的补码 的 8 位表示。
在 C 中用于有符号 2 的补码 8 位整数的最正确类型是 int8_t
来自 stdint.h
。
从 int
到 int8_t
的转换是在 C 中隐式完成的。不需要演员表。
int num = 167;
int8_t b = num;
我想在 C 中将 int 转换为 byte。 我怎样才能得到价值?
in Java
int num = 167;
byte b = num.toByte(); // -89
in C
int num = 167;
???
您可以简单地转换为一个字节:
unsigned char b=(unsigned char)num;
请注意,如果 num
大于 255 或小于 0 C 不会崩溃,只会给出错误的结果。
原生 C 中没有 Byte 这样的类型。尽管如果您不想导入新的库,您可以像这样创建一个:
typedef unsigned char Byte
然后用它创建您想要的任何变量:
int bar = 15;
Byte foo = (Byte)bar
byte
是 java 有符号整数类型,范围为 -128
到 127
。
C 中对应的类型是 int8_t
在 <stdint.h>
中定义的,用于具有 8 位字节的体系结构。它是 signed char
.
你可以这样写:
#include <stdint.h>
void f() {
int num = 167;
int8_t b = num; // or signed char b = num;
...
如果您的编译器发出有关隐式转换为较小类型的警告,您可以添加显式强制转换:
int8_t b = (int8_t)num; // or signed char b = (signed char)num;
但是请注意,将 8 位字节视为 0
到 255
范围内的无符号数量更为常见,对此我们将使用类型 uint8_t
或unsigned char
。 java byte
是有符号类型的原因可能是这种语言中没有无符号类型,但对于非母语读者来说这很容易混淆。
byte
也可以定义为 typedef:
typedef unsigned char byte; // 0-255;
或
typedef signed char byte; // -128-127;
不要使用 char
类型,因为它是实现定义的,默认情况下此类型是有符号的还是无符号的。为 C 字符串中的字符保留类型 char
,尽管许多函数实际上认为这些是无符号的:strcmp()
,函数来自 <ctype.h>
...
在计算机科学中,术语 byte 被明确定义为 8 位原始数据块。显然 Java 使用与计算机科学不同的定义...
-89
是 而不是 值167
“转换为字节”。167
已经适合一个字节,因此无需转换。-89
是值167
转换为 带符号 2 的补码 的 8 位表示。在 C 中用于有符号 2 的补码 8 位整数的最正确类型是
int8_t
来自stdint.h
。从
int
到int8_t
的转换是在 C 中隐式完成的。不需要演员表。int num = 167; int8_t b = num;