如何在c中将int转换为byte?

如何在c中将int转换为byte?,c,type-conversion,C,Type Conversion,我想在C中把int转换成byte。 我怎样才能得到价值呢 in Java int num = 167; byte b = num.toByte(); // -89 您可以简单地强制转换为一个字节: unsigned char b=(unsigned char)num; 请注意,如果num大于255或小于0,则C不会崩溃,只会给出错误的结果。本机C中没有诸如Byte之类的类型。尽管如果不想导入新的库,您可以创建如下类型的库: typedef unsigned char Byte 然后创建

我想在C中把int转换成byte。 我怎样才能得到价值呢

in Java

int num = 167;
byte b = num.toByte(); // -89 

您可以简单地强制转换为一个字节:

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
,在
中为具有8位字节的体系结构定义。它是签名字符的别名

你可以写:

#include <stdint.h>

void f() {
    int num = 167;
    int8_t b = num;  // or signed char b = num;
    ...
但是请注意,通常认为8位字节是
0
255
范围内的无符号量,对于这一范围,可以使用类型
uint8\u t
无符号字符。java
byte
是有符号类型的原因可能是该语言中没有无符号类型,但对于非本机读者来说,这是非常令人困惑的

字节
也可以定义为类型定义:

typedef unsigned char byte;  // 0-255;


不要使用类型
char
,因为默认情况下,此类型是有符号的还是无符号的都是由实现定义的。C字符串中的字符的保留类型<代码> char < /代码>,虽然许多函数实际上认为这些是无符号的:<代码> STRMP()/<代码>,在计算机科学中,从<代码> <代码>…

< p>的函数中,字节被定义为原始数据的8位块。显然,Java使用了与计算机科学不同的定义

  • -89
    不是值
    167
    “转换为字节”
    167
    已经适合一个字节,因此不需要转换

  • -89
    是值
    167
    转换为带符号2的8位补码

  • C中有符号2的补码8位整数最正确的类型是
    int8_t
    from
    stdint.h

  • int
    int8\t
    的转换在赋值时用C隐式完成。不需要演员阵容

    int num = 167;
    int8_t b = num;
    

int8\u t b=(int8\u t)num?“但是请注意,C程序员通常更喜欢将8位字节视为无符号量”,而不仅仅是C程序员。所有的计算机科学家和计算机工程师也是。显然Java
byte
是由一些特殊的雪花设计的。@Lundin:Java没有未签名的类型,我应该重新表述这一部分。编辑后,结果定义良好。“否则,如果新类型是无符号的,则通过反复加或减一个新类型中可以表示的最大值来转换该值。”直到该值在新类型的范围内。
typedef unsigned char byte;  // 0-255;
typedef signed char byte;    // -128-127;
int num = 167;
int8_t b = num;