不时有人在SO上指出char(也就是"字节")不一定是8位.
似乎8位char几乎是通用的.我原本认为,对于主流平台,必须有一个8位char才能确保其在市场上的可行性.
现在和历史上,哪些平台使用的char不是8位,为什么它们与"普通"8位不同?
在编写代码时,考虑跨平台支持(例如,对于通用库而言),对于非8位平台,值得考虑的是什么char?
在过去,我遇到过一些char16位的ADI DSP .我认为DSP是一种利基架构.(然后,当时手工编写的汇编程序很容易击败可用的C编译器可以做的事情,所以我在该平台上没有真正获得C的经验.)
有机器(或编译器),在哪里sizeof(char) != 1?
C99标准是否说sizeof(char)标准合规性实施必须正好1?如果有,请给我部分编号和引文.
更新:
如果我有一台机器(CPU),它不能寻址字节(最小读取是4个字节,对齐),但只有4-s的字节(uint32_t),这个机器的编译器可以定义 sizeof(char)为4吗?sizeof(char)将是1,但char将有32位(CHAR_BIT宏)
Update2: 但是sizeof结果不是BYTES!这是CHAR的大小.char可以是2个字节,或者(可能是)7位?
Update3:
好的.所有机器都有sizeof(char) == 1.但机器有CHAR_BIT > 8什么?
我一直在读句子
不要依赖大小为8位的1字节
使用
CHAR_BIT而不是8作为常量来转换位和字节
等等.今天有什么现实生活系统,这是真的吗? (我不确定C和C++之间是否存在差异,或者它是否与语言无关.如果需要,请重新加入.)
ISO C标准要求CHAR_BIT至少为8.
POSIX强制CHAR_BIT等于8,并且(几乎?)所有使用八位字节的网络和通信标准,是否有任何当代C实现CHAR_BIT> 8?
(注意:我对使用18或36位字的历史计算机体系结构不感兴趣.这是关于C的真正问题,因为它在当前的硬件上使用;考虑使用C99或更高版本的系统).
我正在开发一个使用字节数组的小型网络应用程序。传统上,这些将用类似的东西来声明char buf[] = ...。
这似乎是大多数教程中(仍然?)完成的方式,但它存在一个问题,即它可能会掩盖实际发生的情况,例如,当您尝试打印这样的数组并忘记并非每个字符都是可见字符时。
有些人建议您应该chars完全停止使用,而使用现代的uint8_t. 我发现这非常有吸引力,主要是基于显式优于隐式的原则。
那么,将这些类型的数组声明为 是否有问题uint8_t buf[] = ...?
据我所知,1 char = 1字节= 8位(32位系统).
char c=0xffff0000; //wrong
Run Code Online (Sandbox Code Playgroud)
那么为什么char只允许8位以及文件中的每个字符也是8位长度.
谢谢.
有人可以帮我解释一下代码吗?
为何32位UINT?
为什么0xff?
这里有4个正确的转变吗?
int writeUINT32little(FILE *f, UINT32 i)
{
int rc;
rc = fputc((i & 0xff), f);
if (rc == EOF) return rc;
rc = fputc(((i >> 8) & 0xff), f);
if (rc == EOF) return rc;
rc = fputc(((i >> 16) & 0xff), f);
if (rc == EOF) return rc;
return fputc(((i >> 24) & 0xff), f);
}
Run Code Online (Sandbox Code Playgroud) 在c中,我知道unsigned char的大小为1字节(= 1个八位字节= 8位),并且我知道unsigned char实际上是0到255之间的整数值,现在如果我有以下unsigned char变量:
unsigned char c = 255; //(this value can be any value from 0 to 255)
Run Code Online (Sandbox Code Playgroud)
如何获得包含 8 个元素的表,指示该变量的每个位值(0 或 1)?(像这样:{1, 1, 1, 1, 1, 1, 1, 1})有没有简单的方法可以在c中做到这一点?
我一直在努力解决这个问题,但无济于事.在下面的代码中,我使用了一个char指针(all_seq),但是当我释放它时,在代码的末尾,有时它会出现段错误.我有时说,因为它显然取决于输入文件.使用小输入文件,它很好.有一个大的,它也没关系.对于中等大小的文件,它是段错误的.我只是想不通为什么......
任何想法将不胜感激.谢谢.
/* SeqProb (Sequence Probability) - 2012/03/13 */
/* Given a series of aligned sequences -in one file, one per line- this program calculates the probability of having, in each location, the letter in the first sequence. */
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
FILE *input_file;
FILE *output_file;
///////////////////////////////
// DECLARATION OF FUNCTIONS: //
///////////////////////////////
int GetSize(FILE *file, int *length, int *lines);
double CalcProb(char *one_seq);
//////////////////////////////////////////////////////////////////
// ************************************************************ //
// ************** START MAIN BLOCK ************** //
// …Run Code Online (Sandbox Code Playgroud)