Nếu tồn tại, có tệp tiêu đề để bao gồm không?
Mã này gây ra lỗi biên dịch:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
Nếu tồn tại, có tệp tiêu đề để bao gồm không?
Mã này gây ra lỗi biên dịch:
#include <iostream>
using namespace std;
int main()
{
byte b = 2;
cout << b << endl;
return 0;
}
char là một byte. Nó chỉ là một byte không nhất thiết phải là 8 bit.
CHAR_BIT. Tôi đã làm việc trên nhiều hệ thống nhúng trong đó byte không có độ dài 8 bit. Một char được định nghĩa có kích thước bằng 1, vì vậy có, một char luôn là một byte.
char, ít nhất là 8 bit. Thuật ngữ "byte" có thể được định nghĩa khác nhau trong các ngữ cảnh khác, nhưng khi thảo luận về C hoặc C ++, tốt hơn là nên bám sát định nghĩa của tiêu chuẩn.
using byte = unsigned charvà thực hiện với nó (như câu trả lời của rmp gợi ý)?
Câu trả lời:
Không, không có kiểu dữ liệu byte trong C ++. Tuy nhiên, bạn luôn có thể bao gồm tiêu đề tập hợp bit từ thư viện chuẩn và tạo định dạng cho byte:
typedef bitset<8> BYTE;
NB: Do WinDef.h định nghĩa BYTE cho mã cửa sổ, bạn có thể muốn sử dụng thứ gì đó khác BYTE nếu bạn có ý định nhắm mục tiêu Windows.
Chỉnh sửa: Đáp lại gợi ý rằng câu trả lời là sai. Câu trả lời là không sai. Câu hỏi đặt ra là "Có kiểu dữ liệu 'byte' trong C ++ không?". Câu trả lời là: "Không, không có kiểu dữ liệu byte trong C ++" như đã trả lời.
Liên quan đến phương án thay thế có thể được đề xuất mà người ta đã hỏi tại sao phương án được đề xuất lại tốt hơn?
Theo bản sao của tôi về tiêu chuẩn C ++, vào thời điểm đó:
"Các đối tượng được khai báo dưới dạng ký tự (char) phải đủ lớn để lưu trữ bất kỳ thành viên nào của bộ ký tự cơ bản triển khai": 3.9.1.1
Tôi đọc điều đó để gợi ý rằng nếu việc triển khai trình biên dịch yêu cầu 16 bit để lưu trữ một thành viên của bộ ký tự cơ bản thì kích thước của một char sẽ là 16 bit. Rằng các trình biên dịch ngày nay có xu hướng sử dụng 8 bit cho một ký tự là một chuyện, nhưng theo như tôi có thể nói thì chắc chắn không có gì đảm bảo rằng nó sẽ là 8 bit.
Mặt khác, "bộ bit mẫu của lớp <N> mô tả một đối tượng có thể lưu trữ một chuỗi bao gồm một số bit cố định, N." : 20.5.1. Trong các từ khác, bằng cách chỉ định 8 làm tham số mẫu, tôi kết thúc với một đối tượng có thể lưu trữ một chuỗi bao gồm 8 bit.
Do đó, theo như tôi hiểu thì lựa chọn thay thế tốt hơn cho char có tốt hơn hay không tùy thuộc vào trình biên dịch của bạn và yêu cầu của bạn tại thời điểm đó. Do đó, tùy thuộc vào cá nhân viết mã, theo như tôi có, để xác định xem liệu giải pháp thay thế được đề xuất có phù hợp với yêu cầu / mong muốn / nhu cầu của họ hay không.
bitset<8>tốt hơn unsigned char?
std::byte
BIT_CHAR. Đó là một bí ẩn. Một bí ẩn của vũ trụ ..
Không, không có kiểu nào được gọi là " byte" trong C ++. Thay vào đó, những gì bạn muốn là unsigned char(hoặc, nếu bạn cần chính xác 8 bit, uint8_ttừ <cstdint>, kể từ C ++ 11 ). Lưu ý rằng đó charkhông nhất thiết là một sự thay thế chính xác, vì nó có nghĩa là signed chartrên một số trình biên dịch và unsigned charnhững trình biên dịch khác.
char, signed charvà unsigned charlà ba loại riêng biệt. charcó cùng cách biểu diễn một trong hai phần còn lại.
unsigned charlớn hơn 8 bit, thì uint8_tsẽ không được xác định.
<stdint.h>thay vì <cstdint>.
Có, có std::byte(được định nghĩa trong <cstddef>).
C ++ 17 đã giới thiệu nó.
std::bytekhông thể thực hiện số học trên nó, đó có thể là một công cụ phá vỡ giao dịch.
std::bytechỉ là một sự bổ sung người ta có thể chọn đúng công cụ cho công việc (tức là một trong hai std::byte, char, unsigned charhoặc uint_8).
typedef unsigned char byte;hoặc typedef std::uint8_t byte;?
char*, unsigned char*hoặc std::byte*.
std::bytekhông thể thực hiện số học trên đó, điều này có thể là một công cụ phá vỡ giao dịch.
Không, nhưng vì C ++ 11 nên có [u] int8_t .
Ngoài ra còn có byte_lite , tương thích với C ++ 98, C ++ 11 và mới hơn.
namespace std
{
// define std::byte
enum class byte : unsigned char {};
};
Điều này nếu phiên bản C ++ của bạn không có std :: byte sẽ xác định một kiểu byte trong không gian tên std. Thông thường bạn không muốn thêm những thứ vào std, nhưng trong trường hợp này, nó là một thứ tiêu chuẩn bị thiếu.
std :: byte từ STL thực hiện nhiều hoạt động hơn.
char.