我想在C中将int转换为字节。在Java中,我会写:
int num = 167; byte b = num.toByte(); // -89
在C中:
int num = 167; ???
jm2pwxwz1#
你可以简单地转换为一个字节:
unsigned char b=(unsigned char)num;
请注意,如果num大于255或小于0,C不会崩溃,只是给予错误的结果。
num
kx7yvsdv2#
在原生C中没有Byte这样的类型。但是如果你不想导入新的库,你可以像这样创建一个库:
typedef unsigned char Byte
然后创建任何你想要的变量:
int bar = 15; Byte foo = (Byte)bar
wz8daaqr3#
在计算机科学中,术语 byte 被定义为8位的原始数据块。显然,Java使用了与计算机科学不同的定义。
-89
167
int8_t
stdint.h
int
int num = 167; int8_t b = num;
lb3vh1jj4#
byte是一个Java有符号整数类型,范围为-128到127。C中对应的类型是int8_t,在<stdint.h>中定义,用于8位字节的架构。它是signed char的别名。你可以这样写:
byte
-128
127
<stdint.h>
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:
0
255
uint8_t
unsigned char
typedef unsigned char byte; // 0-255;
或
typedef signed char byte; // -128-127;
不要使用类型char,因为它是实现定义的,默认情况下该类型是有符号的还是无符号的。为C字符串中的字符保留类型char,尽管许多函数实际上认为这些字符是无符号的:strcmp(),functions from <ctype.h>...
char
strcmp()
<ctype.h>
4条答案
按热度按时间jm2pwxwz1#
你可以简单地转换为一个字节:
请注意,如果
num
大于255或小于0,C不会崩溃,只是给予错误的结果。kx7yvsdv2#
在原生C中没有Byte这样的类型。但是如果你不想导入新的库,你可以像这样创建一个库:
然后创建任何你想要的变量:
wz8daaqr3#
在计算机科学中,术语 byte 被定义为8位的原始数据块。显然,Java使用了与计算机科学不同的定义。
-89
* 不是 * 值167
“转换为字节”。167
已经适合一个字节,因此不需要转换。-89
是用8位表示转换为 * 有符号2的补码 * 的值167
。int8_t
fromstdint.h
。int
到int8_t
的转换是在赋值时在C中隐式完成的。不需要石膏。lb3vh1jj4#
byte
是一个Java有符号整数类型,范围为-128
到127
。C中对应的类型是int8_t
,在<stdint.h>
中定义,用于8位字节的架构。它是signed char
的别名。你可以这样写:
如果编译器发出有关隐式转换为较小类型的警告,则可以添加显式强制转换:
然而,请注意,更常见的是将8位字节视为范围
0
到255
中的无符号量,对此可以使用类型uint8_t
或unsigned char
。javabyte
是有符号类型的原因可能是在这种语言中没有无符号类型,但这对于非本机读者来说非常混乱。byte
也可以定义为typedef:或
不要使用类型
char
,因为它是实现定义的,默认情况下该类型是有符号的还是无符号的。为C字符串中的字符保留类型char
,尽管许多函数实际上认为这些字符是无符号的:strcmp()
,functions from<ctype.h>
...