week4B & shorts & walkthroughs-bmp,struct,pointer

freyasnow 2016-07-25 10:36

1.图像

  1. 电影 enhance,位图
  2. 放大图像后,照片变成一些点,每一个成为像素pixel

  3. bitmap:1代表白色像素,0代表黑色像素
  4. jpeg:

    • first three bytes 255 216 255
      即signature of jpeg
    • 转十六进制,0x仅为前缀
    • 找jpeg的话,找pattern:0xff 0xd8 0xff
  5. 所有文件类型,约定了固定的0,1pattern来代表

2.struct

  1. define student:name,dorm,id。重复

    • array
    • 创建我自己的student变量类型,里面有name,dorm和id
  2. struct 语法


    • students[1].name (students array 元素为student 类型)
    • struct student s2 = {3,”s2”}
  3. 相同struct类型s1 = s2,不是copy,而是两个指向同一个数据内存块
  4. code

    • #include “structs.h” (””而不是<>)
    • 用自己的header file
    • .h这个文件没有installed在IDE中(operating system),而是在current directory
    • #define STUDENTS 3 (没有分号)
      在main之外;常数
  5. 文件open,write,append

    • write,每次都会覆盖之前的内容
    • append 追加

3. 关于pointer和pointee

passing the address as arguments


  • 函数作用:不是针对地址本身,而是地址指向的原始数据
  • *a:a is a pointer ;use * give the address pointing object;a give the address
  • &x:x is a variable;use & give the address
  • int* x; x is address of integer

pointer rules:

- pointer 和pointee是分开的。不要忘了set up pointee。(分配内存)

- dereference a pointer to access its pointee(star)

- assignment(=)betwwen pointers makes them point to the same pointee

一个例子


PSET4 SHORTS & WALKTHROUGHS

1.bmp

  1. xxd -c 24 -g 3 smiley.bmp

    xxd命令:a command-line “hex editor”:可以看bmp的每个byte。
    最左侧是address。十六进制,0000036即十进制的(48+6)54,即bmp文件的第54位开始
  2. 24-bit bmp 的最初14+40是metadata。(fileheader和infoheader)

    显示metadata的命令:xxd -c 24 -g 3 smiley.bmp
  3. 55位开始,每byte代表RGB中一种颜色值。(0-255)

    • 3px*3px:每行是9bytes,显示见图。每一个字段是一个px,3个像素,24bit。 24-bit bmp就是每像素存储空间24bit数据。
    • 2个十六进制是一个byte(255二进制,两块4个1,即2个15,2个十六进制ff)
    • 如果bmp每行不是4的倍数,存储会有些不同。添加padding来确保4倍数。

      可以看padding的命令:xxd -c -12 -g 3 -s 54 small.bmp (c设定为12bytes,就有了4columns,3+1padding)
    • 拆成RGB单个byte时,ff要写成0xff。0x标识这是十六进制。
  4. header中的:


    • bisize 40 (这个header的size)
    • biwidth(px)
    • biheight(px)
    • bisizeimage(bytes)
    • bibitcount 24
    • bfsize 总大小=bisizeimage+54
    • bftype 19778
    • bfoffbits 54

2.valgrind

  • 检查内存 。valgrind ./file
  • 例子:s和t分配了相邻的空间。s的实际字符串大于空间,于是覆盖了t的内容。如果silent t的内容,仍然有字符打印,那是s溢出的内容
  • 字符溢出

3.pointer

  1. 3 ways:

    • create dynamic data structures。(data structures built up from blocks of memory allocated from the heap at run-time)
    • handle varaible parameters(传给函数的)
    • alternative ways to access information stored in arrays.特别是strings
  2. pointer basics
    代码


    • 当i,j,p被声明,但还未初始化的时候


  3. heap


4.binary file

  1. fread

    第三个参数:每次读一个struct

  2. fopen

  3. fwrite

  4. fseek


所有评论(0)

你的评论

课程全部笔记
Introduction to Computer Science

Introduction to Computer Science计算机科学导论

评分:
9 (27人评价)
时间:
时间自主
难度:
一般

京ICP证100430号    京网文[2015] 0609-239号    新出发京零字东150005号     京公网安备11010502007133号 ©2017果壳网

关于我们 新手指南