字符串 存储空间字节数固定大小

StringBuffer s = new StringBuffer();
  s.append("张。");//
  //s.setLength(10);//设置字符串的长度为10,字符数不能超过10,向里面添加一个中文,一个中文在gbk下是存两个字节
  //字节数变为9,
  byte[] b = s.toString().getBytes();//将字符串转化为字节数组
  if(b.length>0){
   return "信息过长";
  }
  
  byte[] by = new byte[10];//创建固定长度的字节数组
  //将流与字节数组关联
  ByteArrayInputStream bs = new ByteArrayInputStream(s.toString().getBytes());
  try {
   //将字符串信息写入数组中(保证字符串信息存储的都是10个字节)
   bs.read(by);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  String test = new String(by);
  System.out.println(by.length);
  
  System.out.println(s.toString());
  System.out.println(test.replace("\0", ""));//将空字符替换掉
  return "";
### 字符串在内存中所占空间大小的计算方式 #### C 语言中的字符串存储大小计算 在 C 语言中,`sizeof` 函数用于获取变量或类型的字节大小。对于数组而言,`sizeof` 返回的是整个数组占据的固定内存块大小[^1]。然而,当涉及到字符串时,由于字符串是以 `\0` 结束的字符序列,因此 `strlen` 才是用来计算有效字符数量的函数[^3]。 以下是通过 C 语言实现的一个例子来展示如何分别使用 `sizeof` 和 `strlen`: ```c #include <stdio.h> #include <string.h> int main() { char str[] = "hello"; printf("Size of array (including null terminator): %lu bytes\n", sizeof(str)); // 包含 '\0' printf("Length of string (excluding null terminator): %lu characters\n", strlen(str)); // 不包含 '\0' return 0; } ``` 上述代码展示了两种不同的方法:`sizeof` 给出了包括终止符在内的总字节数,而 `strlen` 只返回实际字符的数量。 #### Python 中的字符串内存占用 Python 提供了一个内置模块 `sys`,其中的方法 `getsizeof()` 能够帮助开发者了解某个对象的实际内存消耗情况[^2]。需要注意的是,此数值不仅包含了字符串本身的数据部分,还可能涉及额外开销,比如对象头或其他元数据信息。 下面是一个简单的演示程序: ```python import sys s = "hello" print(f"Memory size of '{s}': {sys.getsizeof(s)} bytes") ``` 这段脚本会打印出给定字符串的整体内存需求量。 #### JavaScript 中字符串字节数的估算 JavaScript 对于不同范围内的Unicode码点采用可变长度编码机制处理字符串中的每一个字符。具体来说就是依据其对应的Unicode值决定所需的具体字节数目——单个字符可能会被表示成一到四个字节不等[^4]。 这里有一个用来统计任意输入字符串对应字节数的小工具: ```javascript function getByteCount(s) { let count = 0; for(let i=0; i<s.length; ++i){ const codePoint = s.codePointAt(i); if(codePoint >= 0xD800 && codePoint <= 0xDBFF){ continue;// surrogate pair, skip second part } if (codePoint<=0x7f ) count +=1 ; else if (codePoint<=0x7ff ) count +=2 ; else if (codePoint<=0xffff ) count +=3 ; else count +=4 ; } return count; } console.log(getByteCount('你好')); // 输出应为6 ``` 以上三种编程环境中关于字符串内存使用的讨论涵盖了多种场景下的实际情况分析及其解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值